Tag: unit testing

CompletableFuture可用性和unit testing

我正在学习java 8 CompletableFuture并最终得到了这个。 所有的拳头,您如何看待这行代码? 我需要并行向不同的服务发送请求,然后等待所有服务响应并继续工作。 //service A CompletableFuture serviceAFuture = CompletableFuture.supplyAsync( () -> this.ServiceA.retrieve(serviceARequest), serviceAExecutorService ); //service B CompletableFuture serviceBFuture = CompletableFuture.supplyAsync( () -> this.ServiceB.retrieve(serviceBRequest), serviceBExecutorService ); CompletableFuture.allOf(serviceAFuture, serviceBFuture).join(); ServiceAResponse responseA = serviceAFuture.join(); ServiceBResponse responseB = serviceBFuture.join(); 甚至代码都在做我想要的,我在测试代码所在的类时遇到了问题。 我尝试使用Mockito并执行以下操作: doAnswer(invocation -> CompletableFuture.completedFuture(this.serviceAResponse)) .when(this.serviceAExecutorService) .execute(any()); 执行程序服务和服务响应在嘲笑,但测试永远不会结束,并且线程一直在等待这一行 CompletableFuture.allOf(serviceAFuture, serviceBFuture).join(); 我在这里缺少的任何暗示? 谢谢!

如何模拟接口Java PowerMockito

我试图模拟一个界面。 public interface FlowCopyParamsBusinessManager { List findByAppli(String application, String sourcePattern) throws FlowCopyParamsBusinessException; } 在我的代码中,当我调用此方法findByAppli时 ,我想返回一个FlowCopyParams列表。 List lstFlowCopyParams = flowCopyParamsBusinessManager.findByAppli( “TOTO”,”TATA); 在这里我尝试了类测试: @BeforeClass public static void mockBeanIn() throws Exception { List flowCopyParamsList = new ArrayList(); PowerMockito.spy(FlowCopyParamsBusinessManager.class); PowerMockito.when(FlowCopyParamsBusinessManager.class, “findByAppli”, Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); } 我有这个错误: java.lang.IllegalArgumentException: object is not an instance of declaring class 我不知道为什么因为方法findByAppli必须有两个字符串参数 ,我把Mockito.anyString()和我仍然有IllegalArgumentException 。 任何线索? Thxs。

如何模拟私有内部类

我有一个spring应用程序,我想在像这样的控制器上创建一个单一的测试。 问题是Wrapper类是一个私有内部类,因此在测试中不了解Wrapper。 是否可以在不更改控制器类的情况下使用Mockito进行模拟。 我可以使用prepareData()来获取对象的实例,但我不知道是否可以使用它来模拟该对象。 谢谢 @Controller public class Controller { private class Wrapper { private Object1 field1; private Object2 field2; private Object1 method1(){ … } private Object2 method1(){ … } } @ModelAttribute(“data”) public Wrapper prepareData() { return new Wrapper (); } public String save(@ModelAttribute(“data”) Wrapper wrapper, BindingResult result, Model model){ … } } 所以在我的测试中我会有类似的东西 @Test […]

是否有一个使用Hamcrest’describeMismatch’function的JUnit断言版本?

在我尝试过的每个JUnit版本中(最多4.8.1),一个失败的assertThat会显示一条错误消息,如下所示: 预期的:[describeTo] 得到:[对象的字符串表示] 换句话说,它将显示对象的toString()而不是Matcher的不匹配描述。 如果我使用org.hamcrest.MatcherAssert.assertThat中的assertThat,那么它将调用’describeMismatch’并显示更有用的错误消息。 我是否错误地使用了Junit,或者目前没有JUnit版本能够满足我的需求吗? 那么大多数人都会使用Hamcrest声明吗?

使用@BeforeClass和在JUnit 4 Java中使用实例或静态变量有什么区别?

我是unit testing的新手。 关于在JUnit 4中使用@Before注释的目的。 我只是不知道使用它的意义: public class FoodTestCase { static private Food sandwich; @BeforeClass public static void initialise(){ sandwich = new Sandwich(); } } VS public class FoodTestCase { static private Food sandwich = new Sandwich(); } 有什么不同?

使用Powermock模拟类的构造函数时得到ExceptionInInitializerError。 怎么解决?

这是我的情况。 我有一个AbstractController类。 它有一个子类控制器。 在AbstractController的一个方法中,实例化了一个新的ApplicationLock。 我想在为Controller编写ut时模拟ApplicationLock。 我写了一个如下的测试用例。 @test public void testMethod(){ ApplicationLock mockLock=PowerMockito.mock(ApplicationLock.class); PowerMockito.when(mockLock.tryObtain()).thenReturn(true); PowerMockito.whenNew(ApplicationLock.class).withArguments(argThat(new IsFile()),anyString()).thenReturn(mockLock); } 我已经为测试类添加了必要的注释。 @RunWith(PowerMockRunner.class) @PrepareForTest({AbstractController.class}) 但是在运行此测试用例时出现以下错误。 这是AbstractController中的静态初始化程序。 引起:com.acompany.controller.common.AbstractController中的java.lang.NullPointerException。(AbstractController.java:65) private static final String DEFAULT_FOLDER = AbstractController.class.getProtectionDomain().getCodeSource() .getLocation().getPath(); 完整堆栈跟踪如下。 java.lang上的java.lang.Class.forName0(本机方法)中的java.lang.ExceptionInInitializerError,javassist中的javasslang.runtime.Desc.getClassObject(Desc.java:44)中的java.lang.Class.forName(Class.java:169)。 run.Desc.getClassType(Desc.java:153)at javassist.runtime.Desc.getType(Desc.java:123)at javassist.runtime.Desc.getType(Desc.java:79)at com.acompany.controller.portfolio .controllerTest.testIncrementalFail(ControllerTest.java:195)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) :25)在org.powermock.modules.junit4.internal的org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)的java.lang.reflect.Method.invoke(Method.java:597)。 impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:307)at org.junit.internal.runners.MethodRoadie $ 2.run(Me thodRoadie.java:86)org.junit.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ […]

如何unit testing文件访问(Java)?

我知道一个好的unit testing永远不应该访问文件系统。 所以我也知道,你可以使用Mockito和PowerMock来模拟File类。 但是下面的代码呢: public ClassLoaderProductDataProvider(ClassLoader classLoader, String tocResourcePath, boolean checkTocModifications) { // … this.cl = classLoader; tocUrl = cl.getResource(tocResourcePath); if (tocUrl == null) { throw new IllegalArgumentException(“Can’ find table of contents file ” + tocResourcePath); } this.checkTocModifications = checkTocModifications; toc = loadToc(); // … } private ReadonlyTableOfContents loadToc() { InputStream is = null; Document […]

使用注释注入依赖项是否会消除dependency injection(外部配置)的主要好处?

我使用Spring,这是一个控制器: @Controller public class PersonController { @Resource(name=”PersonService”) private PersonService personService; @RequestMapping(value = “/Person”, method = RequestMethod.GET) public String getPersons(Model model) { // Retrieve all persons by delegating the call to PersonService List persons = personService.getAll(); // Attach persons to the Model model.addAttribute(“persons”, persons); //then return to view jsp } 这是一项服务: @Service(“personService”) @Transactional public class PersonService […]

unit testing:断言不起作用?

我正在申请UnitTest一段时间,今天我遇到了一些非常奇怪的事情。 考虑以下代码: TestObject alo = null; assert alo != null; // Pass!!! Assert.assertNotNull(alo); // Fail, as expected. 我google了一下,发现assert是java内置的,而assertNotNull是JUnit支持的。 但我无法理解为什么断言不抱怨null对象?

使用MockMultipartHttpServletRequest进行unit testing(在ItemInputStream.makeAvailable中抛出NullPointerException)

我编写了一个带有HttpServletRequest的转换器类,并将其转换为另一种类型,该类型包含一个指向来自servlet请求的InputStream的指针。 (这个想法是从请求处理中抽象出传输传输协议,所以我也可以从FTP编写类似的转换器。) 现在我正在尝试为此编写一个unit testing,我遇到了问题。 我已经设法找出正确的样板来创建有效的Multipart HTTP请求(使用Spring类MockMultipartHttpServletRequest和MockMultipartFile),但现在我在UploadRequest类的initialize()方法中得到NullPointerException。 我猜测问题是,MockMultipartHttpServletRequest内部的流不是正确初始化,但我无法弄清楚我应该做些什么不同。 任何建议都会感激不尽! 这是堆栈跟踪: java.lang.NullPointerException at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976) at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886) at java.io.InputStream.read(InputStream.java:82) at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96) at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66) at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592) at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618) at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637) at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984) at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:965) at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331) at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148) at com.ooyala.UploadRequest.initialize(UploadRequest.java:51) at com.ooyala.UploadRequestTest.testCreateFromServletRequest(UploadRequestTest.java:57) 这是我的变压器类的缩写版本: public class UploadRequest { private Map params; private InputStream strIn; private Logger Log = Logger.getLogger(UploadRequest.class.getName()); public […]