我想做的是一种可以
的方法更具体地说,我要覆盖的父类X包含
最初我认为使用反射或类似的东西很简单, 然后我发现实施我的要求存在限制。
我认为这是可以实现的,因为Mockito可以做各种方法注入运行时 请有人给一些建议,谢谢 伪代码I图像是这样的:
createAndOverride(Class X) {
X newObj = X.newInstance(args) {
@override
methodOfX(args2) {
...
}
}
return newObj;
}
我打算测试一个Class,它有几个方法调用X1.get(),X2.get(),X3.get()
在某些测试用例中,我需要让Xn.get()返回我可以控制测试的内容(例如null)
由于以下限制:
我的解决方法是自制的Xn Class并将它们传递给测试用例以让Cn.get()得到预期。 代码示例:
ClassToTest.SomeMethod(new X1() {
@override
get() {
return someSpecifiedObjects;
}
});
这种事情在测试案例中得到了扩展。
因此,为了减少重复代码,我想构建一个方法来生成带有指定覆盖方法的Xn实例进行测试。例如
X1 x1 = createAndOverride(X1);
然后,这篇文章的问题来了
答案 0 :(得分:1)
答案 1 :(得分:0)
所以我认为你需要的是与C#的Reflection.Emit
:
虽然我自己没有这样做,但我认为您应该能够使用反射/发射和动态类型创建来实现您所需要的。但是,我还是要提一下,如果你试图测试的“功能”并不是你正在测试的函数的代码路径,那么你可能根本就不应该测试它。例如:
SomeObjectInterface get()
{
if(_someObjectStateIsSet)
{
// Return a concrete implementation A
return new ConcreteImplA();
}
else
{
// Return a concrete implementation B
return new ConcreteImplB();
}
}
在这种情况下,get没有返回null
的代码路径,因此您不需要测试null
。我不确定我是否100%正确理解你的问题,特别是你为null
进行测试的原因,但考虑上述建议,看看哪些对你有用。