簡體   English   中英

使用 Java 進行突變測試布爾值

[英]Mutation testing booleans with Java

我對 Java 的經驗非常少,而且我正面臨一些問題。

我有一個類似於下面的代碼,並有一個目標是殺死它的所有突變。

public class MyClass {

  protected transient boolean something = false;

  public MyClass () {
    something = true;
  }

  boolean isSomething () {
    return something;
  }

}

我的測試代碼看起來像這樣

tester = MyClass();
assertTrue(tester.isSomething());

通過在 Eclipse 上使用 pitest 運行它,它將生成以下更改(所有與return something語句相關):

  1. 用 0 代替 1
  2. 刪除了對成員變量的賦值
  3. 用 0 代替 1
  4. 用 -1 代替 1
  5. 用 -1 代替 1
  6. 用 2 代替 1
  7. 用 0 代替 1

不幸的是,我無法殺死這 4 個和 5 個突變,這兩個突變都用 -1 替換了 1。 有什么辦法可以殺死他們嗎?

這里有幾個問題。

首先,您希望啟用一些正在生成垃圾突變的實驗/研究突變算子。 如果您堅持使用默認設置,則不會發生這種情況。

在 jvm 級別,布爾值表示為 0/1 的整數。 只有以下突變有意義

  • 用 0 代替 1
  • 刪除了對成員變量的賦值

(請注意,雖然在這種情況下突變是有意義的,但默認情況下禁用成員分配的刪除,因為它可以產生等效的突變體)

您沒有提供完整的上下文,因此不清楚重復的 1/0 替換是重復還是不同。

要殺死這些突變體,有兩種方法。 首先刪除多余的代碼。

public class MyClass {

  protected transient boolean something = true;

  boolean isSomething () {
    return something;
  }

}

這在功能上等同於原始代碼,但數量較少。

其次,你需要測試。

既然你做了something受保護的something我假設MyClass有子類? 如果沒有,那么代碼可以進一步減少到

public class MyClass {

  boolean isSomething () {
    return true;
  }

}

您只能編寫一個測試。

assertThat(new MyClass().isSomething()).isTrue();

如果有子類,那么您需要測試來檢查設置something為真,然后斷言isSomething返回真,另一個將其設置為假並斷言該方法返回假。

暫無
暫無

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

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