我需要一些帮助来理解如何对以下内容进行单元测试。我有以下类结构。我必须按原样遵循结构,因为这是根据我们产品的框架,我不能偏离这一点。
package com.rohan.base
import javax.inject.Inject;
public abstract class ServiceBase {
@Inject
protected CommandExecutorBase commandExecutor;
public final void execute() {
commandExecutor.execute(this);
}
}
--------------------------------------------------------
package com.rohan.services
public class MyService extends ServiceBase {
public void someMethod() {}
}
--------------------------------------------------------
package com.rohan.delegates
import javax.inject.Inject;
import com.rohan.services.MyService
public class MyDelegate {
@Inject
MyService myService;
public void callService() {
myService.execute();
}
}
我正在尝试对编码进行 TDD 方法,并且我想确保callService委托类中的execute方法调用Service 类上的方法。
我尝试了以下方法,但它在执行方法中给了我一个空指针异常(因为commandExecutor对象为空)。有人可以告诉我我该怎么做吗?我不被允许使用 PowerMockito。
import org.junit.Test;
import org.mockito.Mockito;
public class MyDelegateUnitTests {
@Test
public void validateServiceExecuteIsCalled() {
MyDelegate delegate = new MyDelegate();
MyService serviceObject = Mockito.mock(MyService.class);
delegate.myService = serviceObject;
Mockito.doAnswer((i) -> {
System.out.println("I am here");
return null;
}).when(serviceObject).execute();
Mockito.verify(serviceObject, Mockito.times(1)).execute();
}
}
我无法模拟 commandExecutor 对象,因为它不可访问(与我的 Delegate 类不同的包)。代替Mockito.doAnswer(),我也尝试过Mockito.doNothing().when(serviceObject).execute();
但我得到了同样的例外。有人可以告诉我,当我尝试在when方法中定义模拟时,为什么它会继续尝试执行真正的方法?谢谢!
幕布斯6054654
相关分类