我想只在测试运行时执行一个方法。
这是完成集成测试。当我运行集成测试时,我想生成一个具有Object状态的json文件。
我想在我的代码中做这样的事情:
if(environnement == TEST) {
// save object as json
}
你知道其他方法吗?少治疗?
此致
答案 0 :(得分:0)
如何使用Polymorphism
OOP功能?
abstract class MyObject {
void doSomething();
}
class MyObjectImpl {
void doSomething() {
// real implementation
}
}
class MyObjectTest {
void doSomething() {
// create your json or other test functional
}
}
class MyObjectFactory {
static getMyObject(Environment env) {
if (env == Environment.TEST) {
return new MyObjectTest();
} else {
return new MyObjectImpl();
}
}
}
答案 1 :(得分:0)
我通常使用这种模式提供测试'钩子'
public class MyObject {
public void doStuff() {
// stuff to do
onCompleteStuff();
}
protected void onCompleteStuff() {
}
}
然后在测试代码中,您可以创建MyObject
的子类来执行仅测试操作:
private MyObject newMyObject() {
return new MyObject() {
@Override
protected void onCompleteStuff() {
saveObjectAsJson();
}
};
}
这样做的好处是可以将测试代码保留在主构建之外。如果您必须在测试中使用模拟,它也将起作用。例如,使用优秀的Mockito库:
MyObject foo=Mockito.spy(new MyObject());
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
saveObjectToJson();
return null;
}
}).when(foo).onCompleteStuff();