如何为没有 getter 方法的 setter 方法编写单元测试?

我有一堂课看起来像这样


public class Assignment {


   protected String AssName;


   public void SetAssSpec(String theSpec){


     this.AssSpec = theSpec;


   }


}

这是我的测试课程


class AssignmentTest {


   @Test

   void testSetAssSpec(){


       String assignmentName = "CSE101";

       Assignment cseAssigment = new Assignment();

       cseAssigment.SetAssSpec(String assignmentName);


       //Now what?


   }



因为没有getter方法。

访问集合字符串的另一种方法是,cseAssigment.AssName但问题是 AssName 受到保护,所以我无法访问它。

我将如何测试它?我是测试和 Junit 的新手。那么,请告诉我这是否有意义?


繁花不似锦
浏览 124回答 4
4回答

绝地无双

此示例中的问题是它没有显示设置值后如何使用该值。这就是如何测试它的线索。如果不使用,则 setter 就没用,也应该删除。它是受保护的,所以我猜有一个子类正在使用它。在这种情况下,我将使用测试子类的方法。如果通过反射使用,我也会通过反射来测试它。

qq_花开花谢_0

您可以声明一个具有 getter 的本地子类:@Testvoid testSetAssSpec(){   class SubAssigment extends Assignment {     String getter() { return AssName; }   }   String assignmentName = "CSE101";   SubAssigment cseAssigment = new SubAssigment();   cseAssigment.SetAssSpec(String assignmentName);   assertEquals(assignmentName, cseAssignment.getter());}您可能并不真正需要测试 Java 分配是否有效。

HUX布斯

测试 getter 方法可能有些过头了,但是如果您想在没有 getter 的情况下检查/测试对象中私有变量的值,您可以使用反射Field f = obj.getClass().getDeclaredField("AssName"); //NoSuchFieldExceptionf.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"));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java