首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧反应试验不会产生预期的误差

弹簧反应试验不会产生预期的误差
EN

Stack Overflow用户
提问于 2019-10-06 15:46:42
回答 1查看 4.3K关注 0票数 2

我正在为我们的反应方法之一编写单元测试。此方法依赖于另一个服务。我嘲笑过这个服务。在运行测试时,我会得到以下错误:java.lang.AssertionError: expectation "expectError(Class)" failed (expected: onError(MyException); actual: onComplete())

以下是我尝试过的:

Method(ReactiveService.class):

代码语言:javascript
运行
复制
@Autowired
private Service serice;

public Mono<MyObject> save(List<MyObject> arg1, String arg2) {
    return SomeUtil.user()
            .map(user -> service.save(arg1, arg2, user))
            .subscribeOn(scheduler)
            .doOnError(e -> {
                throw new MyException(MyObject.class, "save object", e);
            });
}

测试:

代码语言:javascript
运行
复制
@Mock
Service service;

@InjectMocks
ReactiveService reactiveService;

@Test
public void unit_test(){
    when(service.save(any(), any(), any())).thenThrow(new RuntimeException());
    Mono<MyObject> result = reactiveService.save(arg1, arg2);
    StepVerifier.create(result)
        .expectError(MyException.class)
        .verify();
}

从误差中我了解到,没有从该方法接收到信号。但我没有得到我在这里错过的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-07 13:13:32

我认为您所遇到的问题是由SomeUtil.user()没有释放值引起的。

为什么我认为是这样的:我尝试了一个简单的例子来重现你的问题:

代码语言:javascript
运行
复制
    @Test
    void test() {
        Mono<String> monoWithContent =
            Mono.just("Content")
            .map(element -> exceptionThrower());

        // TEST 1
        StepVerifier.create(monoWithContent)
            .expectError()
            .verify();

        Mono<String> monoWithoutContent =
            Mono.empty()
            .map(element -> exceptionThrower());

        // TEST 2
        StepVerifier.create(monoWithoutContent)
            .expectError()
            .verify();
    }

    String exceptionThrower() {
        throw new RuntimeException();
    }

结果是:

TEST 1 -成功通过,因为该值是从Mono发出的,并且它被映射到异常(由exceptionThrower()引发的RuntimeException )。

TEST 2失败,因为没有从Mono发出的值,因此没有调用map方法,整个执行都没有错误。

因此,总之,如果没有从Publisher发出的内容,那么转换操作就不会被调用。

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

https://stackoverflow.com/questions/58258865

复制
相关文章

相似问题

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