如何使注入的模拟等于零?

时间:2019-02-19 17:33:23

标签: java unit-testing junit mocking mockito

我有一堂课,看起来像这样:

public class Foo {
    SomeObj dummy;
    ...
    public Bar makeBar(){
        if(dummy == null) {
            ...do stuff
        }
        return new Bar(dummy);
    }
}

我正在尝试对if语句的内容进行单元测试,以确保我的代码正在执行所需的操作。

现在,我的单元测试看起来像这样:

public class FooTest {    
    @InjectMocks
    Foo foo;

    @Mock
    SomeObj dummy;

    @Before
    public void setUp() throws Exception
    {
        foo = new Foo();

        MockitoAnnotations.initMocks(this);
    }
    ...
    @Test
    public void testMakeBar()
    {
        when(dummy.equals(null)).thenReturn(true);
        ...
        foo.makeBar();
    }
}

当然,这不起作用,这就是为什么我在这里。简而言之,我该如何模拟==运算符?

旁注:抱歉,这是一个愚蠢的问题或简单的解决方法。当尝试使用谷歌浏览器时,我得到了很多“注入的模拟为空”,这实际上是我的问题的对立面。

2 个答案:

答案 0 :(得分:0)

我怀疑您是在想太多事情。只需停止模拟module.exports = { plugins: [ [require("@babel/plugin-proposal-class-properties"), { loose: false }] ], presets: ["@babel/preset-env", "@babel/preset-react"] }; 或停止向dummy注入模拟,您将获得一个Foo Foo的{​​{1}}实例(因为它从未被初始化) )。

答案 1 :(得分:0)

如果这和这里的示例一样简单,则可以在junit中创建一个新的Foo(即实际的新Foo()实例化)并运行它。

如果按照我的想象,如果要通过其他依赖项来进行测试要复杂得多,可以使用@InjectMocks创建一个新的Foo,然后在junit或设置中手动将SomeObj设置为空值。这样,您就不必为可能在其他测试中使用的另一个Foo对象带来麻烦。