繁体   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