gpt4 book ai didi

java - 如何使用 spring 和mockito 获取被测对象的字段

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:12 24 4
gpt4 key购买 nike

我有一个 Spring 服务类,我在 @PostConstruct 方法下向 Executor 提交一些任务。我写了一些测试,但它们在所有运行中的行为并不相同。有时全部通过,有时虽然满足条件但很少失败。

Class A {

Private final ExecutorService executorService = Executors.newCachedThreadPool();

private final Object obj1
private final Object obj2;

@Autowired
public A(Object obj1, Object obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}

@PostConstruct
public void process() {
executorService.submit(() -> {
obj1.doSomething();
obj2.doOtherthing();
});

}

//Some other methods.....

}


Class ATest {

A a;

@Mock
Object obj1;

@Mock
Object obj2;

@Before
public void setUp() {
a = new A(Obj1, Obj2);
}

@Test
public void processTest {

doNothing.when(obj1.doSomething);
doNothing.when(obj1.doOtherthing);
a.process();
verify(obj1).doSomething();
verify(obj2).doOtherthing();

}

@Test
public void otherTest {

//some test

}

}

所以我想在测试类中访问 executorService ,以便我可以监视正在发生的事情,为什么测试的行为不同。

任何建议或推荐都会有帮助。

最佳答案

您可以为您的executorService创建一个包私有(private)方法,并在测试中使用它来获取executorService,但是您的测试类和被测类应该位于同一个包中。

ExecutorService getExecutorService() {
return executorService;
}

除此之外,您还可以使用@InjectMocks注释来代替@Before setUp()

@InjectMocks
private A a;

关于java - 如何使用 spring 和mockito 获取被测对象的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com