正在测试的类:
class FruitQuality {
void testQuality() {
getfruits();
//some code
}
List<Fruits> getfruits() {
return orange;
}
}
下面是测试代码。我模拟了测试中的类class,并覆盖了方法getFruits的返回值。但是当我运行mock时,我没有得到预期的mock返回值。Easymock可以将返回值替换为被测试类的方法,如果这些方法是显式模拟的。当我模拟真实的对象方法时,如何获得模拟的返回值。
@Test
public void test() {
Fruits fruit= new Fruits();
fruit.setFruit("orange");
List<Fruits> fruitsList = new ArrayList<Fruits>();
fruitsList.add(fruit);
Fruits mock = Mockito.mock(FruitQuality.class)
classUnderTest = new FruitQuality();
when(mock.getfruits()).thenReturn(fruitsList);
result= classUnderTest.getfruits();
assertEquals(result, fruitsList);
}
通常,在编写单元测试时,您有一个被测试类包含您正在测试的实现代码,同时嘲弄您的被测试类所依赖的其他类的方法。
参考您的示例,您将有一个类
public class FruitQuality {
private FruitProvider fruitProvider;
public List<Fruit> testQuality() {
List<Fruit> fruits = fruitProvider.getfruits();
/* Some code doing something with fruits, e.g., filtering. */
return fruits;
}
}
还有第二等
public class FruitProvider {
public List<Fruits> getfruits() {
/* Returning some fruits ... */
}
}
@RunWith(MockitoJUnitRunner.class)
public class FruitQualityUnitTest {
@InjectMocks
private FruitQuality fruitQuality;
@Mock
private FruitProvider fruitProvider;
@Test
public void testQuality() {
/* Mocking the provider. */
Fruits fruit= new Fruits();
fruit.setFruit("orange");
List<Fruits> fruitsList = new ArrayList<Fruits>();
fruitsList.add(fruit);
when(fruitProvider.getFruits()).thenReturn(fruitsList);
/* Invoke the method under test. */
List<Fruits> result = fruitProvider.testQuality();
/* Assert that some methods where called. */
verify(fruitProvider, times(1)).getFruits();
/* If the method would return a value, you can do some assertions based on the mocked method calls. */
assertEquals(result, fruitsList);
}
}
如果您想测试您正在嘲弄的同一对象的方法,您可以使用@spy注释而不是@mock,以确保只有您正在明确嘲弄的方法做了原始实现之外的其他事情。
在helper类的静态方法中调用时,它会抛出一个NPE。我所做的是嘲笑MarkupMaker和它的返回值(一个Markup实例)。最后,我希望调用标记实例的。无论我做什么-的调用都是抛出一个NPE。我找不到任何文档告诉我如何在spock中详细模拟方法调用值。 编辑:我添加了示例。的调用返回null,即使我在spock测试中对其进行了嘲弄。 test.groovy java(执行模拟对象的方法) j
我正在为类编写一个单元测试,该类如下所示: 我想编写一个简单的单元测试,它将方法存根(这样它就不会实际触发并命中数据库),但它允许我验证调用是否最终执行。Mockito似乎是这份工作的合适工具。 这似乎是一个很好的游戏计划(至少对我来说)。但当我实际编写代码时,在测试方法的第2行(行)出现以下编译器错误: 类型Mockito中的(T)不适用于参数(void)时的方法 我看到Mockito无法模拟返
我遇到了一个挑战,当我单独运行测试时,测试通过了,但当我运行所有测试时,测试失败了,它会显示以下错误消息: java.lang.RuntimeException:Android.os.Looper中的方法getMainLooper未被嘲弄。详见http://g.co/androidstudio/not-mocked。 在Android.os.looper.GetMainLooper(looper.
任何帮助都将得到高度赞赏。 提前致谢
是否可以用Spock模拟java中的静态方法?我知道模拟静态groovy方法是可能的,但无法使其适用于Java方法。
最近,我看到一篇博文说,“出于文档的目的,我们在服务层使用mocking(在使用spring rest doc的环境中)”,所以这篇博文使用了类似spring的@MockBean到服务层对象的注释。 但我认为,如果我模仿服务层- 所以我觉得这是不对的但是, 我想知道什么更好,或者如何将service object与spring rest文档一起使用 恳求回答