响应式弹簧数据存储库的 JMockit 模拟未按预期工作

问题描述

我正在尝试模拟结果为 Mono 的 spring 存储库。当我模拟两个以上的方法时,它会为它们返回相同的结果。如果我模拟仅返回 String 的其他方法,则它可以正常工作。有人能告诉我我在这里做错了什么吗?名称testMono 的测试失败,因为结果是 monoonemonoonetestSimple 没问题。完整的申请是here

import static org.hamcrest.MatcherAssert.assertthat;
import static org.hamcrest.Matchers.is;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBoottest;

import com.example.demo.data.repository.DemoRepository;
import com.example.demo.service.TestService;

import mockit.Capturing;
import mockit.Expectations;
import reactor.core.publisher.Mono;

@SpringBoottest
class DemoApplicationTests {

  @Autowired
  private TestService testService;

  @Test
  void testMono(@Capturing DemoRepository demoRepository) {
    new Expectations() {{
      demoRepository.testMethodone();
      result = Mono.just("monoone");

      demoRepository.testMethodTwo();
      result = Mono.just("monotwo");
    }};

    String result = testService.callMonoMethods();

    assertthat(result,is("monoonemonotwo"));
  }

  @Test
  void testSimple(@Capturing DemoRepository demoRepository) {
    new Expectations() {{
      demoRepository.simpleOne();
      result = "simpleone";

      demoRepository.simpleTwo();
      result = "simpletwo";
    }};

    String result = testService.callSimpleMethods();

    assertthat(result,is("simpleonesimpletwo"));
  }

}
import org.springframework.stereotype.Component;

import reactor.core.publisher.Mono;

@Component
public class CustomDemoRepositoryImpl implements CustomDemoRepository {

  private static final String ONE = "one";
  private static final String TWO = "two";

  @Override
  public Mono<String> testMethodone() {
    return Mono.just(ONE);
  }

  @Override
  public Mono<String> testMethodTwo() {
    return Mono.just(TWO);
  }

  @Override
  public String simpleOne() {
    return ONE;
  }

  @Override
  public String simpleTwo() {
    return TWO;
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)