使用JUNIT单独模拟java类的最佳方法是什么

时间:2014-07-20 17:18:16

标签: mocking mockito

我被要求模拟一个java类,以便测试团队可以测试它们,但是当我试图搜索不同类型的模拟时,我所得到的只是与junit一起嘲笑

例如使用junit的mockit。有人可以帮助我摆脱这种混乱

2 个答案:

答案 0 :(得分:0)

免责声明:我建议你使用像JUnit这样的框架

但是,这是一个使用Mockito的工作示例,可以作为Java应用程序运行,而不依赖于JUnit。

您需要在类路径上mockito-all.jar运行此代码。

此类正在测试Bar的实现,该实现依赖于另一个名为Foo的类。

import static org.mockito.Mockito.verify;

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class BarTestCase {

    private Bar bar; // the class under test

    @Mock
    private Foo foo;

    public BarTestCase() {
        MockitoAnnotations.initMocks(this); // initialise Mockito
        bar = new BarImpl(foo);
    }

    public void testSomethingWithBar() {
        // given
        String name = "fred";

        // when
        bar.getUserByFirstName(name);

        // then
        verify(foo).doSomething(name);
        // verify(foo).doSomething("");     // un-comment this line to see the test fail
    }

    public static void main(String[] args) {
        BarTestCase myTestCase = new BarTestCase();
        myTestCase.testSomethingWithBar();
        System.out.println("SUCCESS!");
    }
}

这些是运行上述测试类所需的其他类/接口

public interface Bar {
    void getUserByFirstName(String name);
}

public class BarImpl implements Bar {

    private Foo foo;

    public BarImpl(Foo foo) {
        this.foo = foo;
    }

    @Override
    public void getUserByFirstName(String name) {
        foo.doSomething(name);
    }
}

public interface Foo {
    void doSomething(String name);
}

答案 1 :(得分:0)

依赖注入救援。您可以将您的实现放在一个接口后面,并有两个实现它的类。一个用于实际生产代码,一个用于测试目的。要决定使用哪一个,你可以使用某种依赖注入框架,如spring或者其他东西。或者您可以使用旧的学校方式来使用系统属性来决定选择哪个实现。检查部署环境以了解特定于环境的设置,并将其用于此目的。

(同时提醒测试人员,他们需要在某个时刻测试真实的东西......)