簡體   English   中英

如何為沒有 getter 方法的 setter 方法編寫單元測試?

[英]How do I write unit test for a setter method which does not have a getter method?

我有一個看起來像這樣的 class

public class Assignment {

   protected String AssName;

   public void SetAssSpec(String theSpec){

     this.AssSpec = theSpec;

   }

}

這是我的測試 class

class AssignmentTest {

   @Test
   void testSetAssSpec(){

       String assignmentName = "CSE101";
       Assignment cseAssigment = new Assignment();
       cseAssigment.SetAssSpec(String assignmentName);

       //Now what?

   }


} 

由於沒有getter方法。
訪問集合字符串的另一種方法是cseAssigment.AssName但問題是 AssName 受到保護,因此我無法訪問它。
我將如何測試它? 我是測試和 Junit 的新手。 那么,請告訴我這是否有意義?

您可以聲明一個具有 getter 的本地子類:

@Test
void testSetAssSpec(){
   class SubAssigment extends Assignment {
     String getter() { return AssName; }
   }

   String assignmentName = "CSE101";
   SubAssigment cseAssigment = new SubAssigment();
   cseAssigment.SetAssSpec(String assignmentName);

   assertEquals(assignmentName, cseAssignment.getter());
}

但是,正如Kayaman指出的那樣,您可能真的不需要測試 Java 分配是否有效。

此示例中的問題是它沒有顯示設置后如何使用該值。 這就是如何測試它的線索。

如果不使用,setter 是無用的,也應該被刪除。

它是受保護的,所以我猜一個子類正在使用它。 在這種情況下,我會將該方法與測試子類一起使用。

如果它是通過反射使用的,我也會通過反射來測試它。

測試 getter 方法會有點矯枉過正,但是如果您想檢查/測試 object 中沒有 getter 的私有變量的值,您可以使用反射

Field f = obj.getClass().getDeclaredField("AssName"); //NoSuchFieldException
f.setAccessible(true);
String assignmentName = (String) f.get(obj); 

String assignmentName = "CSE101";
Assignment cseAssigment = new Assignment();
cseAssigment.SetAssSpec(String assignmentName);
assertEquals(AssSpec ,ReflectionTestUtils.getField(cseAssigment, "AssSpec"));

暫無
暫無

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

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