簡體   English   中英

使用測試運行器進行兩種不同的測試JUnit

[英]Using test runners for two different tests JUnit

我有一個類,我正在測試使用JUnitCore Test Runners來運行測試。 該程序基本上從鏈表中刪除每個第n個值,這非常簡單。 我正在測試:

1)查看新列表大小是否是我期望的大小。 2)看看我知道應該刪除的元素是否已刪除。 例如下面我知道“項目1”已被刪除。

我的任務是確保1)將通過,2)將失敗,所有這一切都有效,但在運行我的代碼時,我的問題是:

1)這不是一個非常有效的測試,可以改進。 2)當1)為True且2)為假(如下面的代碼中)時,輸出只是“假”,我不確定這是否正確。

我已經嘗試過兩個類都為true並返回True。

  • 測試代碼

      import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.*; import java.util.LinkedList; public class PruneTest { @Test public void testListSize() { LinkedList <String> linkedlist = new LinkedList<String>(); linkedlist.add("Item 0"); linkedlist.add("Item 1"); linkedlist.add("Item 2"); linkedlist.add("Item 3"); linkedlist.add("Item 4"); linkedlist.add("Item 5"); linkedlist.add("Item 6"); linkedlist.add("Item 7"); linkedlist.add("Item 8"); linkedlist.add("Item 9"); Pruner prunes = new Pruner(); prunes.prune(linkedlist, 2); assertEquals(5, linkedlist.size()); } @Test public void testItemRemoved(){ LinkedList <String> linkedlist = new LinkedList<String>(); linkedlist.add("Item 0"); linkedlist.add("Item 1"); linkedlist.add("Item 2"); linkedlist.add("Item 3"); linkedlist.add("Item 4"); linkedlist.add("Item 5"); linkedlist.add("Item 6"); linkedlist.add("Item 7"); linkedlist.add("Item 8"); linkedlist.add("Item 9"); Pruner prunes = new Pruner(); prunes.prune(linkedlist, 2); assertTrue(linkedlist.contains("Item 1")); } } 
  • 用於創建Test Runner的代碼

     import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class PruneTestTwo { public static void main() { Result result = JUnitCore.runClasses(PruneTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } } 

使用替代的assertThat方法和匹配器,而不是舊的assertEquals / assertTrue ,您可以從測試中獲得更詳細和有用的輸出

例如,您可以將上面的兩個測試結合起來,並獲得有關失敗的有意義的輸出:

   @Test
   public void testListSize() {

    LinkedList <String> linkedlist = new LinkedList<String>();
    linkedlist.add("Item 0");
    linkedlist.add("Item 1");
    linkedlist.add("Item 2");
    linkedlist.add("Item 3");
    linkedlist.add("Item 4");
    linkedlist.add("Item 5");
    linkedlist.add("Item 6");
    linkedlist.add("Item 7");
    linkedlist.add("Item 8");
    linkedlist.add("Item 9");

    Pruner prunes = new Pruner();
    prunes.prune(linkedlist, 2);

    assertThat(linkedlist.size(), is(5));
    assertThat(linkedlist, hasItem("Item 1"));    
  }

然后當第二個斷言失敗時,你會得到類似於此的輸出(這比一個孤獨的false更容易理解):

java.lang.AssertionError: 
Expected: a collection containing "x"
     but: was "Item 0", was "Item 1", was "Item 2", was "Item 3", was "Item 4", was "Item 5", was "Item 6", was "Item 7", was "Item 8", was "Item 9"

您可以通過確保修剪后的列表完全符合您的預期來改進它 - 而不是檢查大小和其中的一個項目,您可以使用contains來檢查大小和每個項目(以及列表的順序)匹配:

assertThat(linkedlist, contains("Item 0", "Item 2", "Item 4", "Item 6", "Item 8"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM