我使用的是Mockito1.9.0。我想在JUnit测试中模拟类的单个方法的行为,因此
final MyClass myClassSpy = Mockito.spy(myInstance);
Mockito.when(myClassSpy.method1()).thenReturn(myResults);
问题是,在第二行中,MyClassSpy.Method1()
实际上是被调用的,导致了一个异常。我使用模拟的唯一原因是,以后每当调用MyClassSpy.Method1()
时,将不会调用真正的方法,而返回MyResults
对象。
MyClass
是接口,MyInstance
是接口的实现(如果这很重要的话)。
我需要做些什么来纠正这种间谍行为?
我的情况与公认的答案不同。我试图模拟一个不在包中的实例的包私有方法
package common;
public class Animal {
void packageProtected();
}
package instances;
class Dog extends Animal { }
还有测试类
package common;
public abstract class AnimalTest<T extends Animal> {
@Before
setup(){
doNothing().when(getInstance()).packageProtected();
}
abstract T getInstance();
}
package instances;
class DogTest extends AnimalTest<Dog> {
Dog getInstance(){
return spy(new Dog());
}
@Test
public void myTest(){}
}
编译是正确的,但是当它尝试设置测试时,它调用的是real方法。
声明方法为protected或public可以解决问题,因为这不是一个干净的解决方案。
在我的例子中,使用Mockito2.0,我必须将所有any()
参数更改为nullable()
,以便存根真正的调用。
让我引用正式文件:
有时用when(对象)来阻止间谍是不可能的。示例:
List list = new LinkedList();
List spy = spy(list);
// Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty)
when(spy.get(0)).thenReturn("foo");
// You have to use doReturn() for stubbing
doReturn("foo").when(spy).get(0);
在您的例子中,它类似于:
doReturn(resultsIWant).when(myClassSpy).method1();
请有人帮助我在上面,也提供我的解决上述问题。
我正在与Javascript、Mocha、Chai和SinonJ合作。我想做的是监视一个“equals”方法,该方法由另一个方法“compareUsingOperator”动态调用。下面的代码显示了我的类“StringComparator”,它有两个方法“equals”和“compareUsingOperator”。 这是我的单元测试: 在我的单元测试中,我在“equals”方法上设置了一个间谍,
我要用模拟的approveActivity方法在间谍一个spring豆。 但这不是工作。 > spring自动写入对象成功。 间谍对象是成功的。 模拟方法引发异常。 在此输入代码 我不知道为什么,请帮帮我! SpringFramework3.x和Mockito2.x以及JUnit4.x。 ActivityReduceAPImpl.java org.mockito.exceptions.misusi
我正在用Mockito为一个项目设置jUnit测试。在被测系统(DrawingService)中调用方法时遇到问题。模拟包括图形和IDrawingRepository。 我不熟悉TDD、单元测试和一般的模拟,所以我可能犯了一些noob错误?任何帮助都将不胜感激。 以下是测试课程: 以下是正在测试的系统:
我有一个类,它有两个方法。我想模拟这个类,然后模拟第一个方法,但不是第二个。 例如。 单元测试代码: 奇怪的是m2没有被调用。 我错过什么了吗?
Powermock为什么不模拟静态方法调用,而是在然后()语句中调用初始方法? 在这种情况下,我有一系列方法调用: TestClass方法-调用- Class4方法尝试查找上下文中不存在且挂起的对象,因此我尝试使用Powermock模拟公共静态Class3方法。 所有的类和方法都是非最终的。我使用TestNg。我的测试方法有一个@准备测试我尝试了以下方法来模拟方法调用: 或而不是当-然后返回: 或