Tag: mockito

使用@RunWith Annotation和powerMock时出现问题

最初我在junits中只使用Mockito所以我在@RunWith注释中使用了SpringJUnit4ClassRunner.class,即 @RunWith(SpringJUnit4ClassRunner.class) 由于春季dependency injection工作正常,并正在通过 @Autowired Someservice someservice ; 但现在,我还在其中集成了PowerMock。 所以根据doc ,我已经用@RunWith注释替换了提到的类 @RunWith(PowerMockRunner.class) 但是现在,有些服务似乎是空的。 有没有办法在@RunWith注释中同时使用SpringJUnit4ClassRunner.class和PowerMockRunner.class

如何注入相同接口的多个模拟

我希望测试的Java类(称为ServiceCaller )具有: @Autowired @Qualifier(value=”serviceA”) SomeService serviceA; @Autowired @Qualifier(value=”serviceB”) SomeService serviceB; (有一个doWork()方法,它将检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit有这个: @InjectMocks ServiceCaller classUnderTest = new ServiceCaller(); @Mock SomeService mockServiceA; @Mock SomeService mockServiceB; 然而,当我运行我的测试以检查在正确条件下调用的服务A / B时,我得到空指针,因为模拟没有被注入。 显然它是因为多个依赖于同一个接口( SomeService )。 有没有办法在声明模拟服务时指定限定符? 或者我是否需要为依赖项设置setter并设置旧的方式?

使用Mockito测试Java增强的行为

我想测试一个使用Mockito对其进行增强的java方法。 问题是,当我不知道如何设置增强的期望为工作。 以下代码来自mockito google组中未解决的问题 : import static org.mockito.Mockito.when; import static org.testng.Assert.assertTrue; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.mockito.Mockito; import org.testng.annotations.Test; public class ListTest { @Test public void test() { List mockList = Mockito.mock(List.class); Iterator mockIterator = Mockito.mock(Iterator.class); when(mockList.iterator()).thenReturn(mockIter); when(mockIter.hasNext()).thenReturn(true).thenReturn(false); when(mockIter.next()).thenReturn(“A”); boolean flag = false; for(String s : mockList) { flag = true; } assertTrue(flag); […]

模拟基于reflection的调用

我试图模拟一些基于reflection的方法。 下面你可以看到细节, 被测试的class级 public class TracerLog { @AroundInvoke public Object logCall(InvocationContext context) throws Exception { Logger logger = new Logger(); String message = “INFO: Invoking method – ” + context.getMethod().getName() + “() of Class – ” + context.getMethod().getDeclaringClass(); logger.write(message); return context.proceed(); } } 测试 public class TracerLogTest { @Mock InvocationContext mockContext; @Mock Logger mockLogger; @InjectMocks […]

使用Mockito在方法调用上拦截对象

我有一个类似于void方法的模拟类 public class Mock { public void method(String string) { // doSomething } } 我不关心这个方法做什么,但我想得到String发送。 这个String实际上是一个JSON格式的对象,我正在测试的方法是根据最初发送的字符串修改这个对象(很随意吧)。 method(String json) { Object obj = unparse(json); obj.setRandomValue(random); String parsed = parse(obj); Mock.method(parsed); } 我想看看之前为null的“randomValue”是否实际上是在方法调用之后随机设置的。 最好的方法是拦截json,解析它并检查对象。

在同一个对象上多次调用Mockito。

当试图使用Spring的Mockito时,通过bean声明创建Mock对象…… …在调用Mockito时我发现了一些奇怪的行为。多次没有重置Mock对象,例如: Mockito.when(this.accountMapper.createBadGrammarException()).thenThrow(new BadSqlGrammarException(“Bla”, null, new SQLException())); 一旦在测试期间(在同一个模拟器上)多次调用此代码(“Mockito.when”),测试就会失败并出现错误(BadSqlGrammerException,即使此exception是实际预期的 – 我确实失败了如果我不抛出exception,并手动抛出它工作正常)。 这是预期的行为吗? Mockito似乎建议每次创建一个新的模拟,这意味着为每个方法创建DAO ……? 当我两次调用Mockito.when方法时到底发生了什么? 模拟应该如何反应? 替换行为? 忽略它? 不幸的是,大多数搜索仅产生如何为方法本身的多次调用返回不同结果的结果,但不会产生多次调用Mockito所期望的结果。当… 我只是想在这里了解Mockito和最佳实践,因为只是因为SEEMS才能实现,所以似乎是一个坏主意……

被测试的类中的模拟类

我怎么能和Mockito一起模拟我class上正在测试的其他课程? 例如: MyClass.java class MyClass { public boolean performAnything() { AnythingPerformerClass clazz = new AnythingPerformerClass(); return clazz.doSomething(); } } AnythingPerformerClass.java class AnythingPerformerClass { public boolean doSomething() { //very very complex logic return result; } } 并测试: @Test public void testPerformAnything() throws Exception { MyClass clazz = new MyClass(); Assert.assertTrue(clazz.performAnything()); } 我可以欺骗AnythingPerformerClass从AnythingPerformerClass排除不必要的逻辑吗? 我可以覆盖doSomething()方法以简单返回true或false吗? 为什么我指定Mockito,因为我需要使用Robolectric进行Android测试。

Mockito – 拦截模拟上的任何方法调用

是否有可能以通用方式拦截模拟上的所有方法调用? 例 给定供应商提供的类如: public class VendorObject { public int someIntMethod() { // … } public String someStringMethod() { // … } } 我想创建一个模拟,将所有方法调用重定向到另一个具有匹配方法签名的类: public class RedirectedToObject { public int someIntMethod() { // Accepts re-direct } } Mockito中的when()。thenAnswer()构造似乎适合该法案,但我找不到任何方法调用与任何args匹配的方法。 无论如何,InvocationOnMock肯定会给我所有这些细节。 有没有通用的方法来做到这一点? 看起来像这样的东西,其中when(vo。*)被适当的代码替换: VendorObject vo = mock(VendorObject.class); when(vo.anyMethod(anyArgs)).thenAnswer( new Answer() { @Override public Object answer(InvocationOnMock invocation) { // […]

Mockito间谍 – 在调用构造函数之前存根

我正在试图窥探一个Object,我想在构造函数调用它之前存根一个由构造函数调用的方法。 我的class级看起来像这样: public class MyClass { public MyClass() { setup(); } public void setup() { } } 不得调用安装方法。 那么,我如何监视这个方法(和存根设置,使它什么都不做)? 它可以很好地模拟方法,但我想unit testingMyClass ,所以我需要非常其他的方法。 之所以需要存根设置方法以便它什么都不做: 我正在编写一个Lego机器人(lejos),我在机器人需要工作的设置中放了一些代码。 但是,当我在TinyVM(安装在机器人上的VM)之外调用它时,java崩溃,因为VM尚未正确初始化(因为测试在我的PC上运行)。 对于unit testing,设置并不重要。 我不能存根类/方法设置调用,因为它们中的一些是公共静态最终变量。

使用Mockito模拟Apache HTTPClient

我正在尝试模拟Apache HttpClient接口,以便模拟下面提到的一个方法来返回一个存根的JSON对象作为响应。 HttpResponse response = defaultHttpClient.execute(postRequest); 有人可以通过一些示例代码建议如何实现这一目标吗? 非常感谢您的帮助。 谢谢