2016-05-05 104 views
1

我收到了這樣的消息。當JUnit測試失敗時顯示用戶友好的消息

com.controller.Test1 > test FAILED 
java.lang.NoSuchMethodError at Test1.java:18 

測試編譯的依賴是

testCompile "junit:junit:4.11", 
     'org.mockito:mockito-all:1.10.19', 
     'com.jayway.jsonpath:json-path:2.2.0', 
     'org.hamcrest:hamcrest-all:1.3', 
     'org.flywaydb.flyway-test-extensions:flyway-dbunit-spring4-test:4.0' 

,這是我的測試代碼。

package com.controller; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.runners.MockitoJUnitRunner; 

import static org.hamcrest.Matchers.instanceOf; 
import static org.junit.Assert.assertThat; 


@RunWith(MockitoJUnitRunner.class) 
public class Test1 { 

    @Test 
    public void test(){ 
     assertThat(Long.valueOf(1), instanceOf(Integer.class)); 
    } 
} 

我想要這樣的消息。

預期:java.lang.Integer中 的一個實例,但:< 1L>是一個java.lang.Long中

+0

如何使用'assertTrue(「messageIfFail」,condition)'? – ha9u63ar

+1

or'org.junit.Assert.assertThat(String,Object,Matcher <?super Object>)'?第一個參數(字符串)是將被包含在消息中的一個原因。話雖如此,你的測試失敗了一個'NoSuchMethodError',而不是一個斷言錯誤,讓我覺得你的類路徑有問題。 – Taylor

回答

2

java.lang.NoSuchMethodError是不相關的特異性的JUnit。相反,它表示編譯器類路徑上的類的版本與運行時類路徑上的類的版本不同。

衝突的原因是JUnit自帶的org.hamcrest.Matcher類正在使用,而不是您的代碼中導入的類。在您的導入中使用mockito-core而不是mockito-all來排除匹配器。