2017-03-08 56 views
0

我剛完成家庭作業任務,並通過了大學的自動評估。我想爲它做單元測試,現在我知道這是正確的,但練習使用JUnit當比較大字符串時,JUnit assertEquals的更詳細的輸出

我學會了如何override and read standard outputsimulate standard input。我寫我自己的方法:

public static void simulateIn(final String str) { 
    // Simulated STDIN 
    final ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes()); 
    System.setIn(in); 
} 

我用它如下:

@Test 
public void TestOnePlusOne() throws Exception { 
    simulateIn("1 1 1 1"); 
    // Homework assignment executes here 
    new Lab01().homework(); 
    // Expected input. I didn't translate it, but it's just a simple calculator 
    assertEquals("Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):\n" + 
       "Zadej scitanec: \n" + 
       "Zadej scitanec: \n" + 
       "Zadej pocet desetinnych mist: \n" + 
       "1.0 + 1.0 = 2.0\n", outContent.toString()); 
} 

我離開了預期的輸出翻譯,它真的什麼都無所謂它現在說。重要的是,測試失敗,我得到的只是這個:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running test.TestCalculator 
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.097 sec <<< FAILURE! 

Results : 

Failed tests: TestOnePlusOne(test.TestCalculator): expected:<...desetinnych mist: 

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 

這是非常無益的。由於我知道這個分配是正確的,所以這在單元測試中是錯誤的。我可以得到assertEquals失敗的字符串的完整區別嗎?

+0

你執行此使用'MVN測試'?如果是這樣的maven版本正在使用? – nullpointer

+0

我在netbeans中執行。我對此並不是很有經驗,所以我真的不知道在後臺運行哪些命令。 –

回答

0

試圖再現相同的故障,我給這與一試 -

@Test 
public void log() { 
    Assert.assertEquals("Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):\n" + 
      "Zadej scitanec: \n" + 
      "Zadej scitanec: \n" + 
      "Zadej pocet desetinnych mist: \n" + 
      "1.0 + 1.0 = 2.0\n", ""); // empty string to make sure this fails 
} 

從含有上述測試類的模塊上的根目錄中的命令行執行命令mvn clean install。這導致以下日誌 - 在日誌中

Running TestOne 
true 
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.356 sec <<< FAILURE! - in TestOne 
log on log(TestOne)(TestOne) Time elapsed: 0.007 sec <<< FAILURE! 
org.junit.ComparisonFailure: 
expected:<[Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil): 
Zadej scitanec: 
Zadej scitanec: 
Zadej pocet desetinnych mist: 
1.0 + 1.0 = 2.0 
]> but was:<[]> 
     at TestOne.log(TestOne.java:17) 

注意幾個細節 -

  1. 運行TestOne - 測試類的名稱
  2. 日誌(TestOne) - 名的方法
  3. org.junit.ComparisonFailure
  4. 類型的故障預期和實際..

只是爲了確保一致性,我用Apache Maven 3.3.9maven-surefire-plugin:2.19.1

<dependencies> 
    ... 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
     </plugin> 
    </plugins> 
</build> 
+0

我無法在測試所在的目錄中運行maven。在項目根目錄中運行它會產生相同的輸出:http://pastebin.com/SMSviifP我在pom.xml中沒有插件:https://gist.github.com/Darker/5ff47804ea1b8502583e95b2a4079b02#file-pom-xml Maven版本:'Apache Maven 3.0.5'奇怪的是,你有更新的版本,兩週前我下載了netbeans,maven是該下載的一部分。 –

+0

@TomášZato將surefire-plugin更新爲2.19.1將對您有所幫助。您需要將「」標記包含在與依賴關係標記相同的級別。 – nullpointer