Tag: junit

比较Java中的两个JSON对象

我正在寻找一个JSONparsing库,支持比较两个JSON对象,忽略子订单,特别是unit testing从Web服务返回的JSON。 任何主要的JSON库都支持这个吗? org.json库只是做参考比较。

获取JUnit 4中当前正在执行的testing的名称

在JUnit 3中,我可以得到当前正在运行的testing的名称,如下所示: public class MyTest extends TestCase { public void testSomething() { System.out.println("Current test is " + getName()); … } } 这将打印“当前testing是testing的东西”。 在JUnit 4中是否有任何现成或简单的方法? 背景:显然,我不想只打印testing的名称。 我想加载存储在与testing同名的资源中的特定于testing的数据。 你知道, 约定configuration和所有这一切。 谢谢!

Javagenerics何时需要<? 扩展T>而不是<T>,并有切换的任何缺点?

给出以下示例(使用JUnit和Hamcrest匹配器): Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<java.util.Date>> result = null; assertThat(result, is(expected)); 这不会使用JUnit assertThat方法签名进行编译: public static <T> void assertThat(T actual, Matcher<T> matcher) 编译器的错误信息是: Error:Error:line (102)cannot find symbol method assertThat(java.util.Map<java.lang.String,java.lang.Class<java.util.Date>>, org.hamcrest.Matcher<java.util.Map<java.lang.String,java.lang.Class <? extends java.io.Serializable>>>) 但是,如果我将assertThat方法签名更改为: public static <T> void assertThat(T result, Matcher<? extends T> matcher) 然后编译工作。 所以有三个问题: 为什么现在的版本不能编译? 虽然我依稀的理解这里的协变问题,但是如果必须的话,我当然不能解释。 在改变assertThat方法Matcher<? extends T>是否有任何缺点Matcher<? extends […]

错误:(23,17)无法parsing:junit:junit:4.12

为什么每次我在Android Studio中创build一个新项目时,总是会出现: 错误:(23,17)无法parsing:junit:junit:4.12? 当我在依赖关系中删除testCompile 'junit:junit:4.12' ,这已经不是问题了。 的build.gradle apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.okedroid.myapplication" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' }

有条件地忽略JUnit 4中的testing

好的,所以@Ignore注释对于标记不应该运行testing用例是很好的。 但是,有时我想忽略基于运行时信息的testing。 一个例子可能是如果我有一个并发testing,需要在一定数量的核心的机器上运行。 如果这个testing是在一个单处理器机器上运行的,我认为只是通过testing是不正确的(因为它还没有运行),而且肯定不能通过testing并破坏构build。 所以我希望能够在运行时忽略testing,因为这似乎是正确的结果(因为testing框架将允许构build通过,但loggingtesting不运行)。 我相当肯定注释不会给我这种灵活性,并且怀疑我需要手动为有问题的类创buildtesting套件。 然而,文档并没有提到任何有关这一点,通过API来看,它也不清楚如何以编程方式(即我如何编程创build一个Test或类似的实例相当于@Ignore注释创build的实例?)。 如果有人在过去做过类似的事情,或者对我能做些什么还有一个很好的想法,我很乐意听到这个消息。

用模拟用户input进行JUnittesting

我正在尝试为需要用户input的方法创build一些JUnittesting。 被testing的方法看起来有点像下面的方法: public static int testUserInput() { Scanner keyboard = new Scanner(System.in); System.out.println("Give a number between 1 and 10"); int input = keyboard.nextInt(); while (input < 1 || input > 10) { System.out.println("Wrong number, try again."); input = keyboard.nextInt(); } return input; } 有没有一种可能的方式来自动传递一个int而不是我或其他人在JUnittesting方法中手动执行此操作? 就像模拟用户input一样? 提前致谢。

如何立即重新运行失败的JUnittesting?

有没有办法让JUnit规则或类似的东西,让每一个失败的testing第二次机会,只是试图再次运行它。 背景:我有一个使用JUnit编写的一套Selenium2-WebDrivertesting。 由于时间非常激烈(点击之后只有很短的等待时间),一些testing(100个中的1个,总是一个不同的testing)可能会失败,因为服务器有时反应比较慢。 但是我不能等待很长的时间,因为这样testing就会一直持续下去。) – 所以我认为这个用例是可以接受的,即使testing是绿色的,即使需要第二个testing尝试。 当然,最好有三分之二的多数(重复三次失败的testing,如果其中两次testing是正确的,就把它们作为正确的),但是这是未来的改进。

Java:如何testing调用System.exit()的方法?

我有几个方法应该在某些input上调用System.exit() 。 不幸的是,testing这些情况导致JUnit终止! 把方法调用放在一个新的线程中似乎没有什么帮助,因为System.exit()终止了JVM,而不仅仅是当前的线程。 有没有处理这个问题的共同模式? 例如,我可以替代System.exit()的存根吗? [编辑]有问题的类实际上是一个命令行工具,我试图在JUnit里面testing。 也许JUnit根本就不是这个工作的正确工具? 对于互补回归testing工具的build议是受欢迎的(最好是与JUnit和EclEmma很好地结合的东西)。

在Maven构build中并行运行junittesting?

我使用的是JUnit 4.4和Maven,而且我有大量的长时间运行的集成testing。 在对testing套件进行并行化时,有几个解决scheme可以让我在单个testing类中并行运行每种testing方法。 但所有这些都要求我以这种或那种方式改变testing。 我真的认为这将是一个更简洁的解决scheme,在X线程中并行运行X个不同的testing类。 我有数以百计的testing,所以我并不在乎对单个testing类进行线程化。 有没有办法做到这一点?

将Mockito嘲笑注入Spring bean

我想将一个Mockito模拟对象注入到Spring(3+)bean中,以便与JUnit进行unit testing。 我的bean依赖关系目前是通过在私有成员字段上使用@Autowired注解来注入的。 我已经考虑使用ReflectionTestUtils.setField但是我希望注入的bean实例实际上是一个代理,因此不声明目标类的私有成员字段。 我不想为依赖项创build公共setter,因为我将纯粹为了testing目的而修改我的接口。 我遵循了Spring社区给出的一些build议 ,但是模拟并没有被创build,而且自动布线失败: <bean id="dao" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.package.Dao" /> </bean> 我目前遇到的错误如下: … Caused by: org…NoSuchBeanDefinitionException: No matching bean of type [com.package.Dao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: { @org…Autowired(required=true), @org…Qualifier(value=dao) } at org…DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D…y.java:901) at org…DefaultListableBeanFactory.doResolveDependency(D…y.java:770) 如果我将constructor-arg值设置为无效,那么启动应用程序上下文时不会发生错误。