我被要求模拟一个Java类,以便测试团队可以测试它们,但是当我试图搜索不同类型的模拟时,所有我得到的都是模拟junit
例如mockit与junit。谁能帮我解决一下这个问题?
免责声明:我建议您使用像JUnit这样的框架
但是,这里有一个使用Mockito的工作示例,它可以作为Java应用程序运行,并且不依赖于JUnit。
您将需要在类路径上放置mockitto -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);
}
依赖注入拯救。您可以将实现置于接口之后,并使用两个类来实现它。一个用于实际的生产代码,一个用于测试目的。要决定使用哪一个,你可以使用某种依赖注入框架,比如spring或其他东西。或者您可以使用老派的方法,使用系统属性来决定选择哪个实现。检查您的部署环境以获取特定于环境的设置,并将其用于此。
(同时提醒测试人员,他们也需要在某个点或另一个点测试真实的东西....)