Tag: junit

使用MockMVC测试Spring MVC路由器

我正在尝试使用Spring测试来测试我的Spring MVC webapp。 它使用springmvc-router进行路由,这似乎打破了测试,当我使用@RequestMapping而不是我的routes.conf文件时,它可以正常工作。 我有一个名为valid.jsp的.jsp文件,当我从Jetty运行开发站点时,它显示正常。 控制器是: @Controller @EnableWebMvc public class AuthController { public String valid() { return “valid”; } } 我的GET /valid authController.valid文件映射了GET /valid authController.valid 。 现在,我的测试仪看起来像 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {“/test-context.xml”, “/spring/spring-security.xml”, “file:src/main/webapp/WEB-INF/mvc-config.xml”}) @WebAppConfiguration @Import(RouteConfig.class) public class AuthControllerTest { private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; @Autowired private AuthenticationManager authenticationManager; @Before public void init() { […]

unit testing:断言不起作用?

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

是否有针对varargsarrays的Mockito eq匹配器?

尝试将作为参数传递的数组匹配到接收varargs数组的方法时,我遇到了问题。 其他问题/答案中提到的anyVararg()匹配器对我不起作用,因为我想确保提供的数组是我需要的数组。 我将问题简化为这个更易于理解和抽象问题的例子(我的真正问题是生产代码并且具有业务逻辑,因此对于这个问题的目的而言会令人困惑): @RunWith(MockitoJUnitRunner.class) public class UnitTest { private Object[] objectArray; private List expected; private TestTarget target; @Before public void setUp() { objectArray = new Object[]{ new Object() }; expected = Arrays.asList(new Object(), new Object()); target = Mockito.spy(new TestTarget()); } @Test public void testMakeList() { // this pass as eq works well with normal array […]

如何在junit中使用未捕获的exception处理程序进行multithreading测试?

我有以下代码,我希望成功运行完成,但代码在“失败”(“不应该达到”)行失败;“。 有人可以解释为什么不调用默认的未捕获exception处理程序: public class UncaughtExceptionTest extends TestCase implements UncaughtExceptionHandler { private final List uncaughtExceptions = new CopyOnWriteArrayList(); class UncaughtExceptionTestInnerClass implements Runnable { private final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); private final CountDownLatch latch; UncaughtExceptionTestInnerClass(CountDownLatch latch) { this.latch = latch; executor.schedule(this, 50, TimeUnit.MILLISECONDS); } @Override public void run() { System.out.println(“This is printed”); fail(“this should fail”); latch.countDown(); […]

在非调试模式下,Spring @transaction在junit中没有按预期工作

所有MyService方法都是事务性的。 下面的junit测试,获取项目数,保存新项目,并获取项目数,以确保计数增加1。 public class MyTest extends ServiceTest{ 1. int countBefore = myService.getCount(); //return n 2. myService.add(item); //item is really added to DB 3. int countAfter = myService.getCount(); //return n (sometimes n+1) } @Transactional(propagation=Propagation.REQUIRES_NEW, isolation=Isolation.READ_COMMITTED) getCount(){…} @Transactional(propagation=Propagation.REQUIRES_NEW, isolation=Isolation.SERIALIZABLE) add(){…} @Ignore @ContextConfiguration(locations = { “file:src/main/resources/xxx-context.xml”, “file:src/main/resources/xxx-data.xml”, “file:src/main/resources/xxx-services.xml” }) @TransactionConfiguration(transactionManager = “txManager”, defaultRollback = false) @TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, […]

assumeTrue()如何在JUnit中工作

我正在寻找一些关于Assume.assumeTrue()如何在JUnit中工作的validation。 我想在@BeforeClass方法中使用它,以便在不满足条件时可以避免运行我的测试套件。 但是,我想知道该方法的性质。 如果assumeTrue接收到带有false值的参数,它是否会跳过方法的其余部分(使用@BeforeClass注释)或者是否执行剩余的其余指令。 我也很好奇它可能对注释的方法有任何其他影响: @After @Before @AfterClass 编辑: 在通过一个非常基本的测试运行之后,如果运行了assumeTrue(false) ,那么将忽略该方法的其余部分以及使用@Test @After或@Before注释的任何方法。 对我来说,有一点令人惊讶的是,除了@Test之外,如果将assumeTrue放在@BeforeClass方法中,它还会忽略@Before和@After 。 文档没有指定那种行为(我在询问问题之前检查过)。 Edit2:在@BeforeClass方法中使用assumeTrue()是非常合理的,因为在运行测试套件之前可能需要检查环境变量(即您的构建/测试机器是否有资源)。 这有助于避免因系统速度慢而导致测试失败(如超时)。 所以我仍然不确定为什么这会如此努力…… 我试过的测试看起来像这样 @BeforeClass public static void beforeClassMethod() { System.out.println(“BeforeClass assume”); Assume.assumeTrue(false); System.out.println(“AfterClass assume”); } @Before public void beforeMethod() { System.out.println(“Before”); } @Test public void testMethod() { System.out.println(“Test”); } @After public void afterMethod() { System.out.println(“After”); } @AfterClass public static […]

从Eclipse导出的JAR中排除JUnit

我正在使用Eclipse JUnit集成,它将JUnit库自动包含到我的项目中。 问题是,当我使用Runnable JAR文件目标导出项目时,它包含JUnit。 有没有办法从导出的JAR中排除JUnit(理想情况下也是测试)?

RunWith(PowerMockRunner.class)不适用于包注释

我试图让RunWith(PowerMockRunner.class)使用我现有的包注释。 版本: powermock 1.4.12 mockito 1.9.0 junit 4.8.2 package-info.java //这是用于包注释的 @TestAnnotation(version=”1.0″) package com.smin.dummy; TestAnnotation.java //这是包“com.smin.dummy”的元数据注释类 package com.smin.dummy; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface TestAnnotation { String version(); } A.java package com.smin.dummy; public class A { private static Package myPackage; private static TestAnnotation version; static { myPackage = TestAnnotation.class.getPackage(); version = myPackage.getAnnotation(TestAnnotation.class); } public static String […]

使用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 […]

“线程中的exception”主“java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing”

在我的Ubuntu上,我运行了一个java可执行文件,错误地提到了我在代码中没有明确使用的一些包。 可能是什么解决方案? 谢谢。 $ java -cp .:/home/tim/program_files/programming/java/junit-4.11.jar MyTest Exception in thread “main” java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at org.junit.runner.Computer.getSuite(Computer.java:28) at org.junit.runner.Request.classes(Request.java:75) at org.junit.runner.JUnitCore.run(JUnitCore.java:128) at org.junit.runner.JUnitCore.runClasses(JUnitCore.java:73) at MyTest.main(MyTest.java:13) Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing at […]