我读了一些关于它的帖子,但是没有解决我的问题。我有一个类是单例的,这个类的一个方法正在另一个类中调用。我需要模拟这个方法调用。
Class SingletonClass
{
public static SingletonClass instance()
{
......
return instance;
}
public boolean methodToBeMocked(Object obj)
{
return false;
}
}
另一类是:
Class A
{
Object doSomeStuff()
{
......
boolean result = SingletonClass.instance.methodToBeMocked();
}
}
我在嘲笑我在测试课上学到的方法。我曾尝试使用doReturn,而不是其他帖子中建议的Return,但没有帮助。
我的测试课程是:
Class TestClass{
Class A a = new A();
public void test()
{
SingletonClass singletonClass = mock(SingletonClass.class);
doReturn(true).when(singletonClass).methodToBeMocked(any());
a.doSomeStuff(); // here mocked method returns false
// but if I do this below it returns true !!!!
Object obj = new Object();
boolean result = singletonClass.mockedMethod(obj);
}
}
那么为什么当a.doSomeStuff被调用时我不能实现呢?这里怎么了?
问题在于静态方法公共静态SingletonClass实例()
。标准mockito库不支持对静态方法的模拟。我看到了两种解决方案。
添加新方法getSingletonClassInstance()在测试中被模拟
Class A {
Object doSomeStuff()
{
......
boolean result = getSingletonClassInstance();
}
SingletonClass getSingletonClassInstance(){
return SingletonClass.instance.methodToBeMocked();
}
}
使用mockito库中的spy创建类A的实例
导入静态org.mockito.Mockito.spy;
Class TestClass{
public void test()
{
Class A a = spy(new A());
SingletonClass singletonClass = mock(SingletonClass.class);
doReturn(true).when(singletonClass).methodToBeMocked(any());
doReturn(singletonClass).when(a).getSingletonClassInstance();
a.doSomeStuff(); // here mocked method returns false
// but if I do this below it returns true !!!!
Object obj = new Object();
boolean result = singletonClass.mockedMethod(obj);
}
}
更多关于莫基托间谍的信息。Spy使用了真实实例和调用真实方法,但提供了模拟特定方法的功能。不要担心其他方法,它们将继续使用真正的实现,只有模拟方法会受到影响。
为了其他人的利益,我使用了下面的mock,希望它不会调用someMock。someMethod(),与when(someMock.someMethod())不同。doReturn(“someString”)用法。
Mockito.doReturn("someString").when(someMock).someMethod();
我不明白为什么还在调用真正的某些方法()。原来这个方法被指定为最终方法。Mockito不能嘲笑静态或最终方法。
这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应 我试图写一个测试用例和模拟方法findByEmail()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。 有人能帮忙吗。
我遇到了Mockito的一个bug,但我想知道是否有其他人可以解释为什么这个测试不起作用。 基本上,我有两个对象,如下所示: 第一个对象是通过注释和之前的方法模拟的: 在方法中模拟第二个对象: 当包含对此方法的直接调用以设置并获取第二个对象的模拟时,它将失败: 但是,当同一方法返回的模拟被分配给一个局部变量(在中使用)时,它可以工作: 我们是否做错了什么,或者这确实是Mockito中的一个缺陷/限
我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法
我试图验证在使用powerMockito 1.6.4测试服务方法时从未调用过静态方法 我按照这个答案做了同样的事情。 以下是我的代码。 我现在面临的问题是,调用real并给出nullPointerException。 我的假设是与一起工作,以便指定要验证的静态方法。 我错过什么了吗?
问题内容: 我正在尝试使用“ any”匹配器对这个getKeyFromStream方法进行存根。我尝试了更明确和不太明确的(anyObject()),但似乎无论我如何尝试,此存根都不会在我的单元测试中返回fooKey。 我想知道是否是因为它受到保护,或者我缺少其他东西或做错了什么。在整个测试中,我还有其他的when / then语句在 起作用, 但是由于某种原因,事实并非如此。 注意:getKey
我是Scala新手,正在为Scala中的Play应用程序编写一些测试。Play应用程序已经用Java编写。 我有一个有一个公共方法进程的刷新服务 其中动作在另一个包中定义为POJO 我已经根据Scala指南编写了测试 当试图模拟此服务时,我使用了以下代码 我从Scala得到以下编译器错误,无法弄清楚这些类型如何是矛盾的 [错误]/home/joey/Projects/sntdb/test/cont