Im struggeling學習Mockito單元測試應用程序。下面是該方法的IM的例子目前正在測試單元測試與Mockito - 忽略方法調用
public boolean validateFormula(String formula) {
boolean validFormula = true;
double result = 0;
try {
result = methodThatCalculatAFormula(formula, 10, 10);
} catch (Exception e) {
validFormula = false;
}
if (result == 0)
validFormula = false;
return validFormula;
}
這個方法調用在同一個班級,methodThatCalculatAFormula
,這是我不希望當我單元測試validateFormula
調用另一個方法。
爲了測試這個,我想看看這個方法的行爲取決於methodThatCalculatAFormula
返回的結果。由於它在result
爲0時返回false
,並且如果它是0但是返回有效數字,我希望模擬這些返回值而不運行實際的methodThatCalculatAFormula
方法。
我寫了下面的:
public class FormlaServiceImplTest {
@Mock
FormulaService formulaService;
@Before
public void beforeTest() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testValidateFormula() {
`//Valid since methodThatCalculatAFormula returns 3`
when(formulaService.methodThatCalculatAFormula(anyString(),anyDouble(),anyDouble(),anyBoolean())).thenReturn((double)3);
assertTrue(formulaService.validateFormula("Valid"));
//Not valid since methodThatCalculatAFormula returns 0
when(formulaService.methodThatCalculatAFormula(anyString(),anyDouble(),anyDouble(),anyBoolean())).thenReturn((double)0);
assertFalse(formulaService.validateFormula("Not Valid"));
}
然而,當我運行上面的代碼我assertTrue
是false
。我猜我在模擬設置中做了錯誤的事。如何通過模擬methodThatCalculatAFormula
的返回值而不實際調用它來測試上述方法。
間諜命令工作正常。據我所知,它只是嘲笑指定的方法,這使得它可以測試,即使它是一個模擬。 – 2013-03-14 08:40:06
是的,並確保使用語法doReturn(result).when(spy).method()而不是when(spy.method())。doReturn(result)。後一個將不起作用,因爲它會在定義模擬方法之前調用原始方法 – rcomblen 2013-03-14 08:55:10
是的,我注意到,因爲我得到了一個UnfinishedStubbException,我用Google搜索並找到了答案。 – 2013-03-14 09:04:44