Tag: junit4

在不修改Test类的情况下排除单个JUnit Test方法?

我目前正在使用另一个项目中的JUnit 4测试来反对我的代码。 作为我的自动化Ant构建的一部分,我直接从其他项目的存储库中获取它们。 这很棒,因为它可以确保我的代码在最新版本的测试中保持绿色。 但是,有一部分测试我从未希望传递给我的代码。 但是如果我开始将@Ignore注释添加到那些测试中,我将不得不维护我自己的测试实现的单独副本,我真的不想这样做。 有没有一种方法可以在不修改测试源的情况下排除单个测试? 这是我到目前为止所看到的: 据我所知,Ant JUnit任务只允许你排除整个Test类,而不是单独的测试方法 – 所以这对我没用,我需要方法粒度。 我考虑整合一个TestSuite,它使用reflection来动态查找和添加所有原始测试,然后添加代码以显式删除我不想运行的测试。 但是当我注意到TestSuite API没有提供删除测试的方法时,我抛弃了这个想法。 我可以创建自己的Test类来扩展原始的Test类,覆盖我不想运行的特定测试,并使用@Ignore注释它们。 然后我在我的子类上运行JUnit。 这里的缺点是,如果将新的测试类添加到原始项目中,我将不会自动选择它们。 我将不得不监视新的Test类,因为它们被添加到原始项目中。 到目前为止,这是我最好的选择,但感觉并不理想。 我能想到的唯一其他选择是无论如何都要运行错误测试并忽略失败。 但是,这些测试需要一段时间才能运行(并且失败!)所以我宁愿根本不运行它们。 另外,我看不到告诉Ant任务忽略特定测试方法失败的方法(再次 – 我看你如何为单个测试类而不是方法)。

从命令行运行JUnit Test suite

如何从命令行运行Junit 4.8.1测试套件? 另外我想使用JUnit 4.8引入的类别,有没有一种方法可以从命令行指定我想要运行的类别。

如何使JUnit测试用例按顺序运行?

我正在使用JUnit4。 我在测试用例中有一组测试方法。 每个测试方法都插入一些记录并validation测试结果,最后删除插入的记录。 由于JUnit并行运行,因为在执行上一个测试方法期间存在一些记录,测试方法会失败。 这只发生在我的同事机器(Windows 7)中,而不是在我的机器(Cent OS 6)中。 我们需要的是测试方法必须通过我们所有的机器。 我已经尝试清除Setup()方法中的记录,但它再次只能在我的机器上运行。 JUnit中是否有任何选项可以使测试方法以统一的顺序运行? 谢谢,

在junit 3中拆分?

我们有很多使用JUnit 3编写的集成测试,尽管我们现在使用4.4运行它们。 其中一些需要一个tearDown方法,该方法在类中的所有测试完成后运行(以释放一些公共资源)。 我看到这可以在junit 4中使用@AfterClass(org.junit)完成。 但是,将其混合到扩展TestCase(junit.framework。*)的现有junit 3测试中似乎不起作用。 [BTW有迁移工具吗? 问题264680表明一年前没有一个。] 我已经看到提到使用junit.extensions.TestSetup这种事情。 我对此的简要测试似乎不起作用。 任何例子?

在测试类中模拟私有静态final变量

我在要测试的类中有一些私有的静态final字段。 如下 public class ClassToTest{ …. private static final Myclass myclass = MyClassFactory.getMyClass(type.firstType); …. } 该类型是MyClassFactory中的枚举。 那个工厂做的是根据传递和返回的类型初始化对象。 我的问题是powermock是否支持这一点,如果是的话,该如何做到这一点。

ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase

我对这个错误感到困惑: java.lang.NoClassDefFoundError: junit/framework/TestCase at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:792) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:638) … at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62) at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23) … Caused by: java.lang.ClassNotFoundException: junit.framework.TestCase cannot be found by org.eclipse.xtext.junit_2.4.3.v201309030823 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) … 78 more 当我将Xtext DSL的测试作为插件测试运行时(例如,在内部启动新的Eclipse平台时),会发生exception。 这在我的任何代码执行之前发生。 当我查看插件依赖项时,我可以看到org.junit_4.11.0.v201303080030.jar在类路径上,我也看到/…/workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar 所以OSGis绝对应该能够解决这种依赖。 […]

JUnit4使用testsuite在特定包中运行所有测试

这在JUnit4中是否可行? 在JUnit3中,我将执行以下操作: public class MyTestSuite { public static Test suite() throws Exception { doBeforeActions(); try { TestSuite testSuite = new TestSuite(); for(Class clazz : getAllClassesInPackage(“com.mypackage”)){ testSuite.addTestSuite(clazz); } return testSuite; } finally { doAfterActions } } … }

被测试的类中的模拟类

我怎么能和Mockito一起模拟我class上正在测试的其他课程? 例如: MyClass.java class MyClass { public boolean performAnything() { AnythingPerformerClass clazz = new AnythingPerformerClass(); return clazz.doSomething(); } } AnythingPerformerClass.java class AnythingPerformerClass { public boolean doSomething() { //very very complex logic return result; } } 并测试: @Test public void testPerformAnything() throws Exception { MyClass clazz = new MyClass(); Assert.assertTrue(clazz.performAnything()); } 我可以欺骗AnythingPerformerClass从AnythingPerformerClass排除不必要的逻辑吗? 我可以覆盖doSomething()方法以简单返回true或false吗? 为什么我指定Mockito,因为我需要使用Robolectric进行Android测试。

当使用JUnit的@Parameterized时,我可以让一些测试仍然只运行一次

在许多情况下,我使用@Parameterized对许多排列运行测试。 这非常有效并且使测试代码本身变得简单和干净。 但是有时候我想让一些测试方法只运行一次,因为它们没有使用参数,JUnit是否有办法将测试方法标记为“singleton”或“run-once”? 注意:这不涉及在Eclipse中运行单个测试,我知道如何做到:)

将模拟bean注入spring环境进行测试

我知道有类似的问题,例如在这里 ,但是做了搜索,我找到了一个解决方案,我在这里更开心 然而,我唯一的问题是我不确定如何实现这个解决方案。 我希望能够做的是通过HotswappableTargetSource覆盖我的应用程序上下文中的选择bean的bean定义和我的测试版本,然后运行测试。 然后,对于每个测试用例,我想指定哪些bean我想要热插拔,然后每个测试必须能够创建自己的模拟版本并交换它们,并能够再次交换回来。 我能够获得运行测试的应用程序上下文,但我不知道如何配置bean可热插拔。 我知道如何在使用xml配置bean时这样做,但我不想回到使用xml来配置bean。