【问题标题】:Creating a Student object for unit test为单元测试创​​建一个学生对象
【发布时间】:2016-08-21 17:55:01
【问题描述】:

我是 Java 新手,需要一些帮助。我有一个实用程序类,它有两种方法,一种方法将 Json 字符串转换为对象,另一种方法将对象转换为 Json 字符串

我想用 junit 测试这些方法。为了这个测试目的,我当然需要一个对象。让我们说一个有名字和 StudentId 的学生对象。

我的问题是,有没有什么方法可以在我的测试中获得这个对象,而无需实际为学生创建一个单独的班级?因为我只需要这个对象来进行测试。

【问题讨论】:

  • 为什么需要单独的课程?
  • 1) “字符串到对象”测试:组装一个有效的 JSON 字符串,将其传递给您的方法,然后断言返回的对象(学生)具有您的属性预计。 2)“对象到字符串”测试:创建学生类的实例,将其传递给您的方法,然后断言返回的字符串是代表您的学生的有效 JSON 字符串。
  • @shmosel 我只需要任何对象进行测试。根据我所知道的,对象不需要有一个类吗?在这种情况下是 Student 类?
  • @Seelenvirtuose 我没有任何学生课程。我只需要一个测试对象。那么我应该为测试创建一个学生类吗?
  • 嗯...告诉我们方法的签名。

标签: java json unit-testing junit objectmapper


【解决方案1】:

为什么要创建另一个学生类? 只需在您的 junit 测试类中创建一个 Student 对象(当然,测试必须与代码分开) 它会是这样的:

import org.junit.Before;
import org.junit.Test;
import org.junit.After;

public class StudentTest
{

    private Student tester;

    @Before
    public void setUp() throws Exception
    {
        //init student objects
    }

    @Test
    public void test()
    {
        //test logic
    }

    @After
    public void cleanUp()
    {
        //destruct
    }
}

有关测试逻辑的解释,请参阅 junit 文档,例如断言非空 如果您的班级不被称为学生,请参加您针对您的问题提出的班级(您的实用课程?)

【讨论】:

  • 哦,与其他 cmets 不同,您不需要明确创建类。您可以将实用程序类用于测试并通过向方法提供流来模拟输出。由于潜在的代码重复,它不是很干净。你基本上是创建新对象,给它们输入,例如 JSON,测试和破坏
【解决方案2】:

如果您不想创建单独的类,您可以在 JUnit 测试类中创建一个静态成员类,如下例所示:

public class StaticMemberClassDemo {

    public static void main(String[] args) {
        Student student = new Student("John Doe", 1);
    }

    private static class Student {
        private final String name;
        private final int id;

        public Student(String name, int id) {
            this.name = name;
            this.id = id;
        }
    }
}

【讨论】:

    【解决方案3】:

    我不确定您所说的单独课程是什么意思。请注意,在 java 中您可以定义不同类型的nested classes。在这里,按照 rohitvats 的建议定义一个静态嵌套类并没有什么坏处。

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多