使用Mockito从Mocked对象获取值时出现异常

时间:2016-05-31 13:35:48

标签: spring junit mockito

我正在使用mockito为Spring @component类编写junit。 当它尝试从最终常量文件中访问静态字段时抛出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);


    }

CruserDomain

    //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类中查找final类静态变量。

2 个答案:

答案 0 :(得分:1)

我强烈建议你不要模拟域对象,而是我会制作可以生成这些对象的构建器。

同样在代码片段中@InjectMocks没有模拟注入,所以不注入任何东西,应该在测试类中声明模拟字段。但是我强调不要嘲笑域名的意思!

我们已经写了这个关于如何编写好测试的页面,我认为TDD从业者应该阅读它,不管他们是否使用了mockito。很多人都有助于改进这个维基页面。

=> https://github.com/mockito/mockito/wiki/How-to-write-good-tests

答案 1 :(得分:0)

很难理解你的代码,因为你已经用注释替换了有趣的部分,但我猜你会得到一个NPE,因为

contractMonth

为空。那是因为你没有模拟和/或忘记定义你从(CruserRepository?)得到contractMonth的类的行为