Tag: mockito

为嵌套对象生成unit testing用例的测试数据

在为任何企业级java服务编写unit testing用例的模拟依赖服务时,我发现为unit testing用例设置数据非常痛苦。 大多数情况下,这是开发人员不编写unit testing用例而非编写集成样式测试用例的最有说服力的理由。 如果服务依赖于其他几个服务(取决于它们各自的DAO)和它自己的DAO, when-thenReturn为一个合理嵌套的对象生成when-thenReturn子句变得相当费力,并且开发人员被认为采取了简单的方法并加载整个spring上下文并从直接源获取数据,这些数据可能并不总是提供可遍历所有必需代码路径的数据。 在此背景下,我的一位同事建议,为什么不运行样本集成测试,并使用方面,捕获所有相关数据点并将其序列化为XML表示,该表示可用于实现unit testing的测试数据案例。 令我们惊喜的是,我们在github上找到了一个名为TestDataCaptureJ的框架,它与此非常相似。 它使用方面来捕获数据点,并生成java代码来创建对象。 网站上显示的动机似乎非常贴切,我想知道是否有任何其他替代品可以提供类似的function。 而且,如果专家可以批评这种整体方法,那将是很好的。 此外,该项目大约2岁,并有一些我们不得不修复的错误,并希望将其作为一个mavenized github fork回来。 只需检查以确保其中一个着名的马厩也没有其他类似的倡议。 提前致谢!

Mockito NullPointerException

我按照@hoaz的建议。 但是,我得到了nullpointerexception @RunWith(MockitoJUnitRunner.class) public class GeneralConfigServiceImplTest { @InjectMocks private GeneralConfigService generalConfigService; @Mock private SomeDao someDao; @Mock private ExternalDependencyClass externalDependencyObject @Test public void testAddGeneralConfigCallDAOSuccess() { when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList(Arrays.asList(“1234”))); //println works here, I am able to get collection from my mocked DAO // Calling the actual service function generalConfigService.process(externalDependencyObject) } } 在我的代码中它是这样的: import com.xyz.ExternalDependencyClass; public class GeneralConfigService{ private […]

为什么EclEmma没有带有@RunWith测试的覆盖代码(PowerMockRunner.class)

我正在使用EclEmma和Eclipse来帮助我知道我的项目中缺少代码测试的地方,但所有使用@RunWith(PowerMockRunner.class)测试都没有被调用,因此没有经过测试。 我正在使用JUnit 4.8.1和Mockito。 会是什么呢?

一个奇怪的generics边缘情况与Mockito.when()和generics类型推断

我正在编写一个使用Mockito的java.beans.PropertyDescriptor测试用例,我想模仿getPropertyType()的行为来返回一个任意的Class对象(在我的例子中, String.class )。 通常,我会通过调用: // we already did an “import static org.mockito.Mockito.*” when(mockDescriptor.getPropertyType()).thenReturn(String.class); 然而,奇怪的是,这不编译: cannot find symbol method thenReturn(java.lang.Class) 但是当我指定类型参数而不是依赖于推理时: Mockito.<Class>when(mockDescriptor.getPropertyType()).thenReturn(String.class); 一切都很笨拙。 为什么编译器在这种情况下无法正确推断when()的返回类型? 我之前从未必须指定参数。

Mockito在创建模拟对象时抛出NullPointer

我有一个集成测试,其中一些设置是使用Guice完成的。 我正在使用Mockito来模拟一些依赖项。 这对我来说一直很好,直到现在。 我需要将PowerMock用于其他依赖项。 现在Mockito在加载一个自己的类时抛出NullPointerException : java.lang.ExceptionInInitializerError at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.(ConditionalStackTraceFilter.java:17) at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:30) at org.mockito.exceptions.base.MockitoException.(MockitoException.java:19) at org.mockito.exceptions.misusing.MockitoConfigurationException.(MockitoConfigurationException.java:18) at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:145) at org.mockito.internal.configuration.ClassPathLoader.findPluginImplementation(ClassPathLoader.java:110) at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:106) at org.mockito.internal.configuration.ClassPathLoader.(ClassPathLoader.java:59) at org.mockito.internal.util.MockUtil.(MockUtil.java:21) at org.mockito.internal.MockitoCore.(MockitoCore.java:40) at org.mockito.Mockito.(Mockito.java:932) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.internal.runners.ClassRoadie.runBefores(ClassRoadie.java:56) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:43) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120) at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:101) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at […]

Mockito:如何validation一个方法只被调用一次,确切的参数忽略了对其他方法的调用?

在Java中使用Mockito如何validation方法只调用一次精确参数忽略对其他方法的调用? 示例代码: public class MockitoTest { interface Foo { void add(String str); void clear(); } @Test public void testAddWasCalledOnceWith1IgnoringAllOtherInvocations() throws Exception { // given Foo foo = Mockito.mock(Foo.class); // when foo.add(“1”); // call to verify foo.add(“2”); // !!! don’t allow any other calls to add() foo.clear(); // calls to other methods should be ignored // […]

的Mockito; 使用list调用verify方法,忽略列表中元素的顺序

我有一个类(ClassA)来获取目录中的文件。 它扫描给定目录中与正则表达式匹配的文件。 对于每个匹配的文件,它将文件对象添加到列表中。 处理完目录后,它会将文件列表传递给另一个类(ClassB)进行处理 我正在为ClassA编写unit testing,因此使用Mockito模拟ClassB,并将其注入ClassA。 然后我想在不同的场景中validation传递给ClassB的列表的内容(即我的模拟) 我已经将代码删除了以下内容 public class ClassA implements Runnable { private final ClassB classB; public ClassA(final ClassB classB) { this.classB = classB; } public List getFilesFromDirectories() { final List newFileList = new ArrayList(); // … return newFileList; } public void run() { final List fileList = getFilesFromDirectories(); if (fileList.isEmpty()) { //Log […]

Mockito:如何在不模拟所有参数的情况下轻松存根方法

我有一个方法我想要存根但它有很多参数。 我怎样才能避免模拟所有参数但仍然存在方法。 例如: //Method to stub public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, …..endless list of parameters..);

Mockito:如何使用getter setter

我对Mockito来说是个新手,我想知道如何将一个get / set对存根。 例如 public interface Dummy { public String getString(); public void setString(String string); } 我怎样才能使它们正常运行:如果在测试的某个地方我调用了setString(“something”); 我想让getString()返回“something”。 这是可行的还是有更好的方法来处理这种情况?

Mockito和Hamcrest:如何validationCollection参数的调用?

我遇到了Mockito和Hamcrest的仿制问题。 请假设以下界面: public interface Service { void perform(Collection elements); } 以下测试片段: Service service = mock(Service.class); // … perform business logic verify(service).perform(Matchers.argThat(contains(“a”, “b”))); 所以我想validation我的业务逻辑实际上是用这个顺序包含“a”和“b”的集合调用服务。 但是, contains(…)的返回类型是Matcher<Iterable> Matcher<Iterable> ,所以Matchers.argThat(…)在我的情况下返回Iterable ,这自然不适用于所需的Collection 。 我知道我可以使用Hamcrest hasItem和Mockito中提出的参数捕获器validation不一致 ,但我非常愿意不这样做。 有什么建议! 谢谢!