【发布时间】:2020-01-07 13:55:41
【问题描述】:
我有一个函数正在调用另一个类的方法。此类和方法已经过测试,并且正在使用实时数据,这使得我的测试与我硬编码的预期值不一致。
public class MyClass{
public void functionToBeTested(String params){
//stuff to do
Caller call = new Caller();
callResult = call.post(someJSON);
//do stuff with callResult
}
}
这里是junit:
public class TestMyClass{
MyClass testClass = new MyClass();
Caller mock;
@Before
public void setup(){
premadeAnswer = new String(file);
mock = Mockito.mock(Caller.class);
Mockito.when(mock.post(Mockito.any())).thenReturn(premadeAnswer);
}
@Test
public void studentFees_CorrectSSN(){
assertEquals(expected.getThing(), testClass.functionToBeTested("PARAMS").getThing());
}
}
我很确定我做的一切都是正确的,但显然它不是在模拟,而是调用函数 ans 如果它不是一个 junit,它的行为就如预期那样。如果我不得不猜测发生了什么,即使我正在创建一个模拟对象并使用 when/thenReturn 它也没有附加到 MyClass testClass 对象。
【问题讨论】:
-
您在方法中创建了一个新的 Caller 对象。因此,它与您的测试中的模拟对象不同。尝试使用 DI 将 Caller 对象注入到您的类中。或者创建一个方法 getCaller() 来返回新的 Caller 对象。然后你可以监视你的 CUT (MyClass) 并在调用 getCaller 时返回一个模拟。
标签: java unit-testing junit mocking mockito