仅在测试时运行代码

时间:2015-03-20 10:46:20

标签: java testing

我想只在测试运行时执行一个方法。

这是完成集成测试。当我运行集成测试时,我想生成一个具有Object状态的json文件。

我想在我的代码中做这样的事情:

if(environnement == TEST) {
   // save object as json
}

你知道其他方法吗?少治疗?

此致

2 个答案:

答案 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();