Tag: 嘲笑

如何告诉Mockito模拟对象在下一次被调用时返回不同的东西?

所以,我创build一个模拟对象作为类级别的静态variables像这样…在一个testing中,我希望Foo.someMethod()返回一个特定的值,而在另一个testing中,我希望它返回一个不同的价值。 我遇到的问题是,似乎我需要重build模拟,以使其正常工作。 我想避免重build模拟,并在每个testing中使用相同的对象。 class TestClass { private static Foo mockFoo; @BeforeClass public static void setUp() { mockFoo = mock(Foo.class); } @Test public void test1() { when(mockFoo.someMethod()).thenReturn(0); TestObject testObj = new TestObject(mockFoo); testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value } @Test public void test2() { when(mockFoo.someMethod()).thenReturn(1); TestObject testObj = new TestObject(mockFoo); testObj.bar(); // calls […]

使用Mockito的通用“any()”方法

我有一个接口,需要一个Foo数组的方法: public interface IBar { void doStuff(Foo[] arr); } 我正在嘲笑这个接口使用Mockito,我想断言doStuff()被调用,但我不想validation什么parameter passing – “不关心”。 如何使用any() ,generics方法而不是anyObject()来编写以下代码? IBar bar = mock(IBar.class); … verify(bar).doStuff((Foo[]) anyObject());

用mockitovalidation对象的属性值

我有一个方法调用,我想嘲笑与mockito。 首先我创build并注入了一个将调用该方法的对象的实例。 我的目的是validation方法调用中的一个对象。 有没有一种方式,mockito可以让你断言或validation对象,它的属性时,调用模拟方法? 例 Mockito.verify(mockedObject) .someMethodOnMockedObject( Mockito.<SomeObjectAsArgument>anyObject()) 而不是做anyObject()我想检查参数对象包含一些特定的领域 Mockito.verify(mockedObject) .someMethodOnMockedObject( Mockito.<SomeObjectAsArgument>**compareWithThisObject()**)

Mockito可以不考虑参数存根方法吗?

我正在尝试使用Mockitotesting一些遗留代码。 我想要在生产中使用一个FooDao ,如下所示: foo = fooDao.getBar(new Bazoo()); 我可以写: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); 但显而易见的问题是, getBar()永远不会被调用该方法所用的相同Bazoo对象调用。 (诅咒new操作员!) 我会喜欢它,如果我可以存根方式,它返回myFoo无论参数。 否则,我会听取其他解决方法的build议,但我真的想避免改变生产代码,直到有合理的testing覆盖率。

Mockitotesting一个void方法抛出一个exception

我有一个void返回types的方法。 它也可以抛出一些exception,所以我想testing这些抛出的exception。 所有的尝试都失败了,原因相同: 当Stubbertypes中的(T)不适用于参数(void) 任何想法如何可以让方法抛出一个指定的exception? doThrow(new Exception()).when(mockedObject.methodReturningVoid(…));

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() 但是我得到了TooManyActualInvocationsexception,因为Mockito认为doSomething只能被调用一次。 我该如何validationdoSomething的第二个调用的参数?

unit testing数据库驱动应用程序的最佳策略是什么?

我使用了很多由后端数据库驱动的Web应用程序。 通常,有一个独立于业务和表示逻辑的ORM层。 这使得对业务逻辑进行unit testing相当简单; 事情可以在离散模块中实现,并且testing所需的任何数据都可以通过对象模仿来伪造。 但是testingORM和数据库本身一直充满着问题和妥协。 多年来,我尝试了一些策略,其中没有一个能完全令我满意。 用已知数据加载testing数据库。 针对ORM运行testing,并确认正确的数据返回。 这里的缺点是您的testing数据库必须跟上应用程序数据库中的任何模式更改,并且可能会不同步。 它也依赖于人造的数据,并且可能不会暴露由于愚蠢的用户input而发生的错误。 最后,如果testing数据库很小,则不会像缺less索引那样显示效率低下。 (好吧,最后一个unit testing应该不是什么用处,但是并没有受到影响。) 加载生产数据库的副本并进行testing。 这里的问题是,你可能不知道什么是在生产数据库在任何时候; 如果数据随时间变化,您的testing可能需要重写。 有人指出,这两种策略都依赖于具体的数据,unit testing只能testingfunction。 为此,我已经看到了build议: 使用模拟数据库服务器,并检查ORM是否正在发送正确的查询来响应给定的方法调用。 你用什么策略来testing数据库驱动的应用程序? 最适合你的是什么?

模拟和存根之间有什么区别?

我已经阅读了各种关于嘲笑testing的文章,包括Martin Fowler的Mocks不是Stubs ,但是还是不了解其中的差别。

如何使模拟无效方法与mockito

如何用void返回types来模拟方法? 我实现了观察者模式,但是我不能用Mockito来嘲笑它,因为我不知道如何。 我试图在互联网上find一个例子,但没有成功。 我的class长看起来像 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); … … } } interface Listener { […]

使用Mockito多次调用具有相同参数的相同方法

有没有一种方法来让后续调用中的stubbed方法返回不同的对象? 我想这样做来testingExecutorCompletionService非确定性响应。 即为了testing,不pipe方法的返回顺序如何,结果保持不变。 我正在testing的代码看起来像这样。 // 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 = 0; i […]