首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何单位测试返回Uni/Multi的Smallrye变反应库?

如何单位测试返回Uni/Multi的Smallrye变反应库?
EN

Stack Overflow用户
提问于 2021-07-10 18:43:55
回答 2查看 2.3K关注 0票数 1

我在我的夸克应用程序中使用Smallrye反应库,因为它在夸克应用程序中是本地支持的。

我试图为服务类编写单元测试。我不知道如何为返回Uni/Multi.的方法编写单元测试

一种返回Uni<String>的方法

代码语言:javascript
复制
public Uni<String> hello(final String name) {
    final String message = "Hello " + name;
    return Uni.createFrom().item(message);
}

为上述方法实现的单元

代码语言:javascript
复制
@Test
void testHello() {
    final Uni<String> casePass = hello("Ram");
    // assertion passes and all good with this.
    casePass.subscribe().with(message -> Assertions.assertEquals("Hello Ram", message));
    
    final Uni<String> caseFail = hello("Ravan");
    //  It is expected to fail the assertion, and it does. But the test is not failing, instead aseertion fail message simply logged to the console.
    caseFail.subscribe().with(message -> Assertions.assertEquals("Hello Sita", message));
}

控制台日志

代码语言:javascript
复制
[-- Mutiny had to drop the following exception --]
Exception received by: io.smallrye.mutiny.helpers.UniCallbackSubscriber.onItem(UniCallbackSubscriber.java:71)
org.opentest4j.AssertionFailedError: expected: <Hello Sita> but was: <Hello Ram>
    at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
    at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
    at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
    at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
    at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1124)
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-14 06:53:24

有几种方法。您可以使用Smallrye.io/小型化/叛变/指南/测试中提供的实用方法。但是,如果根据您的评论,您需要更多信息,我建议您采用以下方法:

代码语言:javascript
复制
final Uni<Greeting> casePass = hello("Ram");
Greeting g = casePAss.await().atMost(Duration.ofSeconds(5)); // To be sure we don't stay tucked
// Assertions come here

所以,基本上,你阻止,直到项目被发送。避免使用await().indefinitely(),因为如果Uni从未发送项目,它可能会阻塞您的测试。如果Uni发送失败,await()...并不会抛出异常。

票数 1
EN

Stack Overflow用户

发布于 2021-07-28 18:39:48

我真的推荐使用来自SmallRey的测试方式。

https://smallrye.io/smallrye-mutiny/1.7.0/guides/testing/

例如,您仍然可以从多个/uni使用调用中获取对象。

代码语言:javascript
复制
 public static Uni<String> hello(final String name) {
    final String message = "Hello " + name;
    return Uni.createFrom().item(message);
}

@Test
public void testUnit() {
    UniAssertSubscriber<String> tester = hello("someone")
            .invoke( i -> Assertions.assertEquals("Hello someone", i))
            .invoke(i -> Assertions.assertNotNull(i))
            .subscribe().withSubscriber(UniAssertSubscriber.create());
    tester.assertCompleted();
}

@Test
public void secondUnit() {
    UniAssertSubscriber<String> tester = hello("none")
            .invoke( i -> Assertions.assertEquals("Hello someone", i))
            .invoke(i -> Assertions.assertNotNull(i))
            .subscribe().withSubscriber(UniAssertSubscriber.create());
    tester.assertCompleted();
}

我希望你能那样使用它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68330665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档