我正在用 mockito 写 junit 作为春季@component课。当它尝试从最终常量文件访问静态字段时,引发 Null 指针异常。
CruserDomainTest
@RunWith(MockitoJUnitRunner.class)
public class CruserTest {
@InjectMocks
CruserDomain eDomain = new CruserDomain();
@Test
public void testGetCruseById() throws Exception,
{
String cCode = "AA";
int employeeId = 21305;
when(
cruseRepository.getTestId(
anyString(), anyInt())).thenReturn(
buildAndReturnList());
when(
payDomain.getRefPay(anyString(),
anyString(), anyString(), anyString()))
.thenReturn(buildPay());
CruseMember expectedResponse = eDomain.getMemberById(
airlineCode, employeeId);
}
克鲁瑟域
//getting null pointer exception in the below line execution
//while getting the current month
public CruseMember getMemberById(String cCode, int employeeId)
throws Exception {
//Some code //
if (contractMonth.getType().equals(
CruseConstant.CURRENT_MONTH)) {
currentMonthStartDate = cMonth.getStartDate();
} else if (contractMonth.getType().equals(
CruseConstant.OTHER_MONTH)) {
nextMonthStartDate = cMonth.getStartDate();
}
CruseConstant:
public final class CruseConstant {
public static final String CURRENT_MONTH = "C";
public static final String OTHER_MONTH = "O";
}
我尝试使用ReflectionTestutils,但在junit启动时抛出异常。
帮助我了解如何在 injectMocked 类中查找最终类静态变量。
我强烈建议你不要模拟域对象,相反,我会制作可以生成这些对象的构建器。
同样在代码片段中,@InjectMocks
没有要注入的模拟,因此不注入任何内容,模拟字段应在测试类中声明。但是,我强调不要嘲笑域名!
我们已经写了这个关于如何编写好测试的页面,我认为TDD从业者应该阅读它,无论他们是否使用mockito。 很多人为完善这个维基页面做出了贡献。
=> https://github.com/mockito/mockito/wiki/How-to-write-good-tests
很难理解你的代码,因为你已经用注释替换了有趣的部分,但我猜你会得到一个 NPE,因为
contractMonth
为空。那是因为你没有模拟和/或忘记定义你从中获得 contractMonth 的类的行为(CruserRepository?)