我正在努力学习 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
我不想在我 unittest 时调用它validateFormula
。
为了测试这一点,我想看看这个方法的行为取决于methodThatCalculatAFormula
返回的内容。因为它false
在为 0 时result
返回,如果它是除 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
我将如何通过模拟返回值而不实际调用它来测试上述方法。