CDI事件到达与Quarkus的整合测试

58 阅读1分钟

为了测试从托管Bean发出的CDI事件的到来。


import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.inject.Inject;

@ApplicationScoped
public class MessageSender {

    @Inject
    Event<String> messageEvent;

    public void send(){
        this.messageEvent.fire("duke rocks!");
    }
}

...你可以将托管Bean注入到集成测试中,将其作为"被测类 "有序方法。


import static org.junit.jupiter.api.Assertions.assertEquals;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

import io.quarkus.test.junit.QuarkusTest;


@QuarkusTest
@ApplicationScoped
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MessageSenderIT {
    
    @Inject
    MessageSender cut;
    
    String expected;

    //...the first test sends the event:
    @Test
    @Order(1)
    void send() {
        this.cut.send();     
    }

    //on "ordinary" CDI listener receives the message
    public void receive(@Observes String message){
        this.expected = message;
    }

    //the last test method verifies the arrival of the event
    @Test
    @Order(2)
    void verifyArrival() {
        assertEquals("duke rocks!",this.expected);
    }
}