Tag: junit4

使用@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(); } 有什么不同?

Junit4 + Spring 2.5:断言抛出“NoClassDefFoundError”

我一直在使用Spring在Junit4中编写测试,我得到了这个有趣的行为: 如果我的测试像这样传递,一切都很好: @Test public void truthTest(){ assertTrue(true); //Ok } 但是,如果我的测试失败了: @Test public void truthTest(){ assertTrue(false); //ERROR } 然后,我收到一个丑陋而神秘的堆栈跟踪而不是测试失败,这就是: http://pastie.org/429912 对不起这个丑陋的转储,但它是我解释问题的唯一数据(我为了可读性而“粘贴”它) 我真的很困惑,有没有人遇到过这种问题? 提前致谢!

使用JUnit 4的预期exception机制导致意外行为的原因?

我试图测试一个特定的方法从方法抛出预期的exception。 根据JUnit4文档和这个答案,我把测试编写为: @Test(expected=CannotUndoException.class) public void testUndoThrowsCannotUndoException() { // code to initialise ‘command’ command.undo(); } 但是,此代码未通过JUnit测试,将抛出(和预期)exception报告为错误。 我正在测试的方法只有在体内: public void undo() { throw new CannotUndoException(); } 此外,以下测试通过: public void testUndoThrowsCannotUndoException() { // code to initialise ‘command’ try { command.undo(); fail(); } catch (CannotUndoException cue){ } } 意味着实际抛出了预期的exception。 我实际上计划将方法更改为实际执行某些操作,而不是仅仅抛出exception,但是让我对导致问题的原因感到好奇,以免将来再次发生。 已进行以下检查: 导入到测试用例中的CannotUndoException是正确的 JUnit的第4版是我的类路径中唯一的一个 清理和构建Eclipse工作区并没有改变结果 我正在使用JUnit 4.1,在同一个测试中我正在使用Mockito。 什么可能导致错误的失败?

执行单个测试时使用Eclipse和JUNIT4的initializationError

我的测试类就是这个: /** * The Class TestAddSubscriber. */ @RunWith(LabelledParameterized.class) public class TestAddSubscriber extends AbstractTestSubscriber { /** * Instantiates a new test add subscriber. * * @param label * the label * @param apiKey * the api key * @param userKey * the user key * @param customerId * the customer id */ public TestAddSubscriber(String label, String […]

我在Mockito 2.2中使用什么代替Whitebox来设置字段?

当使用Mockito 1.9.x时,我一直在使用Whitebox来设置字段值以“注入”模拟。 以下示例: @Before public void setUp() { eventHandler = new ProcessEventHandler(); securityService = new SecurityServiceMock(); registrationService = mock(RegistrationService.class); Whitebox.setInternalState(eventHandler, “registrationService”, registrationService); Whitebox.setInternalState(eventHandler, “securityService”, securityService); } 我真的很喜欢这种方法,但是现在我尝试升级到Mockito 2.2.7我注意到(或者更确切地说,我的IDE注意到并告诉了我很多次)在Mockito中找不到Whitebox。 我找到了一个可以替代的替代方案,那就是org.powermock.reflect.Whitebox ,问题在于我得到另一个依赖(Powermock),只是为了使用Whitebox。 Powermock也有一个名为Whitebox的类,但遗憾的是它看起来好像不能与Mockito 2.2.x一起使用 Mockito有什么好的选择,我可以用来手动“注入”字段,现在Whitebox已不再可用吗? 解 我在回复@JeffBowman的post时写了一篇评论。 简而言之,我选择复制WhiteBox的代码,并使用它,因为它在大多数测试用例中使用,并且该类与其他类没有依赖关系。 这是解决这个问题的最快途径。 注意 @bcody建议的解决方案是一个更好的选择,如果你使用spring,它不会为你维护额外的代码。 我得到的信息很晚了:(

不能使用Spring进行JUnit测试

我的测试定义如下: package com.mytest; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class SpringTestCase { @Test public void testSave_success() { fail(“Not implemented”); } } 我的目的是运行此测试并失败! 我的测试的spring配置文件位于: /com/mytest/SpringTestCase-context.xml 我的spring配置文件的内容如下: 当我运行我的测试时,我得到以下exception: java.lang.NoClassDefFoundError: org/springframework/core/AttributeAccessorSupport at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at org.springframework.test.context.TestContextManager.(TestContextManager.java:117) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:119) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:108) […]

如何为所有测试初始化​​Spring applicationContext一次

我有一组需要弹簧上下文的测试。 为了快速执行测试,我想确保Spring上下文只被初始化一次,然后所有的测试应该针对这个上下文运行,然后它应该关闭。 我已经尝试过以下方法: 使用@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文 使用@RunWith(SpringJUnit4ClassRunner.class)和@TestExecutionListeners({MyTestExecutionListener.class})和一个手写的测试执行监听器来初始化spring上下文并将其注入具体的测试类 在基类和静态字段中使用@BeforeClass侦听器来存储spring上下文,并使用@AfterClass来关闭 使用这三种方法,弹簧上下文似乎不止一次初始化,这需要花费很多时间。 似乎JUnit在运行测试时卸载了类,因此静态字段的内容有时会丢失。 有没有办法确保弹簧上下文只初始化一次?

对不同的测试方法使用不同的Spring测试上下文配置

我们有一个基于Spring的JUnit测试类,它使用内部测试上下文配置类 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = ServiceTest.Config.class) public class ServiceTest { @Test public void someTest() { … @Configuration @PropertySource(value = { “classpath:application.properties” }) @ComponentScan({ “…” }) public static class Config { … 最近已向Service类引入了新function,应将相关测试添加到ServiceTest中。 然而,这些还需要创建一个不同的测试上下文配置类(现有Config类的内部相当复杂,如果可能的话,将其更改为新旧测试似乎非常困难) 有没有办法实现一个测试类中的某些测试方法将使用一个配置类,而其他方法将使用另一个? @ContextConfiguration似乎只适用于类级别,因此解决方案可能是为新测试创建另一个测试类,它将使用自己的上下文配置类; 但这意味着通过两个不同的测试类覆盖相同的Service类

jUnit中每个@Test都有不同的拆解

有没有办法为jUnit中的每个@Test定义一个不同的拆解?

Spring Test DBunit警告

我正在使用spring-test-dbunit,我在unit testing中收到一条警告: 码: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “/context.xml”}) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class }) public class TestDB { @Autowired private ICourseService courseService; @Test @DatabaseSetup(“sampleData.xml”) public void testFind() throws Exception { List courseList = this.courseService.getAllCourses(); assertEquals(1, courseList.size()); assertEquals(“A001”, courseList.get(0).getCourseNumber()); } } 警告: 1093 [main] WARN org.dbunit.dataset.AbstractTableMetaData – 发现潜在问题:配置的数据类型factory’class org.dbunit.dataset.datatype.DefaultDataTypeFactory’可能导致当前数据库’MySQL’出现问题(例如某些数据类型可能不会得到适当支持)。 在极少数情况下,您可能会看到此消息,因为支持的数据库产品列表不完整(list = [derby])。 如果是这样,请通过论坛请求java级更新。如果您使用自己的IDataTypeFactory扩展DefaultDataTypeFactory,请确保覆盖getValidDbProducts()以指定支持的数据库产品。 当我使用没有spring-test-dbunit的DBunit时,问题可以解决如下: Connection jdbcConnection […]