Questions tagged «mockito»

Mockito是Java的模拟框架。它受到EasyMock的启发,但旨在进一步简化模拟存根,验证和工具。

10
如何使用Mockito模拟void方法
如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我无法用Mockito对其进行模拟,因为我不知道如何做。 我试图在Internet上找到一个例子,但没有成功。 我的课看起来像这样: public class World { List<Listener> listeners; void addListener(Listener item) { listeners.add(item); } void doAction(Action goal,Object obj) { setState("i received"); goal.doAction(obj); setState("i finished"); } private string state; //setter getter state } public class WorldTest implements Listener { @Test public void word{ World w= mock(World.class); w.addListener(this); ... ... …


5
如何验证未使用Mockito调用特定方法?
如何验证未对对象的依赖项调用方法? 例如: public interface Dependency { void someMethod(); } public class Foo { public bar(final Dependency d) { ... } } 通过Foo测试: public class FooTest { @Test public void dependencyIsNotCalled() { final Foo foo = new Foo(...); final Dependency dependency = mock(Dependency.class); foo.bar(dependency); **// verify here that someMethod was not …
625 java  tdd  mockito 


6
Mockito能否捕获多次调用的方法的参数?
我有一个被调用两次的方法,并且我想捕获第二个方法调用的参数。 这是我尝试过的: ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class); ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class); verify(mockBar).doSomething(firstFooCaptor.capture()); verify(mockBar).doSomething(secondFooCaptor.capture()); // then do some assertions on secondFooCaptor.getValue() 但是我得到一个TooManyActualInvocations例外,因为Mockito认为doSomething应该只调用一次。 如何验证第二个调用的参数doSomething?

5
使用Mockito模拟某些方法,但不模拟其他方法
使用Mockito,有什么方法可以模拟类中的某些方法,而不能模拟其他方法? 例如,在这个(当然是人为设计的)Stock类中,我想模拟getPrice()和getQuantity()返回值(如下面的测试代码所示),但我想getValue()按Stock类中的编码执行乘法 public class Stock { private final double price; private final int quantity; Stock(double price, int quantity) { this.price = price; this.quantity = quantity; } public double getPrice() { return price; } public int getQuantity() { return quantity; } public double getValue() { return getPrice() * getQuantity(); } @Test …
402 java  mocking  mockito 

2
Mockito测试void方法会引发异常
我有一个带有void返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

11
用Mockito模拟静态方法
我已经写了一家工厂来生产java.sql.Connection物体: public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory { @Override public Connection getConnection() { try { return DriverManager.getConnection(...); } catch (SQLException e) { throw new RuntimeException(e); } } } 我想验证传递给的参数DriverManager.getConnection,但不知道如何模拟静态方法。我在测试用例中使用的是JUnit 4和Mockito。有没有模拟或验证此特定用例的好方法?

9
Mockito:试图窥探方法是在调用原始方法
我正在使用Mockito 1.9.0。我想在JUnit测试中模拟类的单个方法的行为,所以我有 final MyClass myClassSpy = Mockito.spy(myInstance); Mockito.when(myClassSpy.method1()).thenReturn(myResults); 问题是,在第二行中,myClassSpy.method1()实际上是在被调用,从而导致异常。我使用模拟的唯一原因是,以便以后每次myClassSpy.method1()调用时,都不会调用real方法,并且myResults将返回对象。 MyClass是一个接口,并且是该接口myInstance的实现(如果有关系的话)。 我需要怎么做才能纠正这种间谍行为?
349 java  junit  mockito 



4
Mockito可以在不考虑参数的情况下对方法进行存根吗?
我正在尝试使用Mockito测试一些旧代码。 我想存根FooDao在生产中使用的a ,如下所示: foo = fooDao.getBar(new Bazoo()); 我可以写: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); 但是明显的问题是,getBar()从来没有使用与Bazoo我存根方法相同的对象来调用它。(请该new运算符!) 如果我可以以不myFoo考虑参数的方式返回该方法的方法来对它进行存根,我将非常喜欢。失败的话,我会听取其他解决方法的建议,但我真的想避免更改生产代码,直到有合理的测试范围为止。


9
将Mockito与具有相同参数的多次调用相同方法一起使用
有一种方法可以使存根方法在后续调用中返回不同的对象吗?我想这样做是为了测试来自的不确定响应ExecutorCompletionService。即,不管方法的返回顺序如何进行测试,结果都保持恒定。 我要测试的代码看起来像这样。 // Create an completion service so we can group these tasks together ExecutorCompletionService<T> completionService = new ExecutorCompletionService<T>(service); // Add all these tasks to the completion service for (Callable<T> t : ts) completionService.submit(request); // As an when each call finished, add it to the response set. for (int i …
289 java  mocking  mockito 

23
将Mockito模拟注入Spring bean
我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过使用@Autowired在私有成员字段上注释来。 我已经考虑过使用 ReflectionTestUtils.setField但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模拟程序,并且自动装配失败: <bean id="dao" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.package.Dao" /> </bean> 我当前遇到的错误如下: ... Caused by: org...NoSuchBeanDefinitionException: No matching bean of type [com.package.Dao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: { @org...Autowired(required=true), @org...Qualifier(value=dao) } at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901) at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770) 如果将constructor-arg值设置为无效值,则启动应用程序上下文时不会发生错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.