被称为“静态成员”的模拟类被调用,但它在测试中不被认为是模拟?

时间:2018-04-16 01:23:44

标签: java mockito

我嘲笑了这门课,直到给我这个错误。不知道我在这里做错了什么,但我在包含

的行上收到错误:when() requires an argument which has to be 'a method call on a mock'
Mockito.when(trdi.strToInteger(newValueIn)).thenReturn(0);

这个课程被嘲笑,但我不明白为什么它会给我这个错误。我的IDE也告诉我trdi.strToInteger是一个通过实例引用访问的静态成员。

public class TestApproved extends TestGroovy {

    @Mock
    private DataLayer dl;
    @Mock
    private DataStore dsIn;
    @Mock
    private DataStore ds;
    @Mock
    private TRDIUtils trdi;

    @Parameterized.Parameter
    public String client;

    @Parameterized.Parameters(name = "{index}: {0}")
    public static Object[] data() {
        return new Object[]{
          1, 2, 3, 4
        };
    }

    private String newValueIn;

    @Before
    public void setUp() throws Exception {
        //groovy script file to test
        groovyScriptFile = new File(GROOVY_SCRIPTS_FOLDER + "/" + client + "/ToTest.groovy");

        MockitoAnnotations.initMocks(this);

        newValueIn = "1";

        //groovy script parameters
        addGroovyBindingVariable(GroovyScriptArgName.DATASTORE, dsIn);
        addGroovyBindingVariable(GroovyScriptArgName.NEW_VALUE, newValueIn);
    }

    /**
     * Test that user and date are nullified/disallowed to be updated if 'Approved' column is unchecked
     *
     */
    @Test
    public void testUncheckedApproved() throws Exception{
        Mockito.when(trdi.strToInteger(newValueIn)).thenReturn(0);

        evaluate();
        Mockito.verify(dsIn, Mockito.times(1)).setItemNull(1,"XX_APPROV_DATE");
        Mockito.verify(dsIn, Mockito.times(1)).setItemNull(1,"XX_APPROV_USER");
    }

1 个答案:

答案 0 :(得分:1)

对于模拟静态类,我们需要使用PowerMockito。

使用以下调用为静态类方法做准备

PowerMockito.mockStatic(TRDIUtils.class)

然后开始使用您的方法,如下所示

PowerMockito.when(TRDIUtilsstrToInteger(newValueIn)).thenReturn(0);

希望这有助于根据自己的逻辑进行自定义。快乐的编码。