Junit 调用方法中另一个类的对象的代码

Junit 调用方法中另一个类的对象的代码,junit,Junit,可能重复: 如何为以下代码编写junit测试类 包装样品 公务舱Fortest{ UserDao userdao = new UserDao(); Phone name = new Phone(); public String handleUser(User user) { String returncode="failed"; // User usr = new User("bob"); String username=user.getUsername();

可能重复:

如何为以下代码编写junit测试类

包装样品

公务舱Fortest{

UserDao userdao = new UserDao();
Phone name = new Phone();
public String handleUser(User user) {

    String returncode="failed"; //        User usr = new User("bob");
    String username=user.getUsername();
    String pass=user.getPass();
    System.out.println("username and password : "+username+" : "+pass);


    String ph = name.getA();
    System.out.println("ph "+ph);

    if(ph.equalsIgnoreCase("test")){
        System.out.println("A "+ph);
        returncode="done";
    }
    System.out.println("returning "+returncode);

    return  returncode; //        System.out.println("name "+name.toString()); //        System.out.println(name.getA());


} }

因此,您需要执行以下选项之一,将mock注入字段
name
userdao

  • 不要直接在代码中调用构造函数,而是通过setter使用字段注入。这将允许您的测试提供两个类的模拟实例

  • 为这两个字段提供默认的范围设置器方法。这些方法仅用于测试目的

  • 使用Refection将字段设置为模拟实例。一种简单的方法是使用Spring的ReflectionTestUtils

  • 一旦其中一个到位,您就可以提供模拟实例(可能使用Mockito)来驱动您希望测试的行为。我建议,如果可行的话,选项1是最好的,然后是选项3。然而,选项3的缺点是测试依赖于私有字段的名称