【发布时间】:2018-09-17 14:36:47
【问题描述】:
我正在使用 Mockito 来模拟一个方法,但测试正在运行真正的方法。
//Controller
@RestController
public class Controller {
private Utils utils = new Utils();
public String myMethod(String json){
// Stuff gets done
return utils.writeToKafka(topic, json, kafkatemplate, classname);
}
我有一个如下所示的测试类:
//Test
@RunWith(SpringJUnit4ClassRunner.class)
public class ControllerTest {
@Captor
ArgumentCaptor<String> argumentCaptor;
@Test
public void processOSPUpdateRequested_test(){
Controller controller = new Controller();
Utils utils = Mockito.spy(new Utils());
Mockito.doReturn("myResult").when(utils).writeToKafka(anyString(), anyString(), any(), anyString());
String topic = controller.myMethod(myString);
//Some assertions
我的 writeToKafka 方法签名是:
public String writeToKafka(String topic, String json, KafkaTemplate<String, String> kafkaTemplate, String classname)
但是,当我运行测试时,writeTokafka 没有被嘲笑!它运行实际的方法。为什么会这样?我错过了什么?
【问题讨论】:
-
您的控制器有自己的
utils实例。它没有你发现的那个。 -
@khelwood 那么这里的好做法是什么?使用单例模式?
-
依赖注入常用于解决此类问题。通常你不会让你的控制器实例化
Utils本身:它会从你可以访问的地方获取它,以便你可以替换它。
标签: java unit-testing testing mocking mockito