如何使用JUnit的公共getter和私有setter来测试一个类?

时间:2015-05-07 17:57:04

标签: java unit-testing testing junit

假设我们有以下课程:

d

我该如何测试这门课程?由于eclipse只想测试公共方法,我应该如何在不设置setter的情况下测试getter?将上述类中的 package com.porphyrie.examples; public class TestExample { private String name; private int id; public TestExample() { setName("testExample"); setId(3); } public String getName() { return name; } private void setName(String name) { this.name = name; } public int getId() { return id; } private void setId(int id) { this.id = id; } } setter-methods设置为private仅用于测试目的是否有效?

感谢您的帮助......

3 个答案:

答案 0 :(得分:1)

您的示例代码是未编写的代码的一个很好的示例,可以轻松进行单元测试。如果您采用的思维方式必须以一种让您更容易测试的方式设计/构造/编写代码,那么您就不应该有这些问题。简短的回答,是的,如果您不希望setter成为公共API的一部分,那么将setter公开为启用您的测试或包/默认范围。

或者,您可以添加另一个带参数的构造函数,以便在创建实例时为您设置值。

答案 1 :(得分:0)

你不应该将setter设为私有,因为setter的目的是让程序员实现一个类,将他们想要的值设置到类的字段中。由于字段已经是私有的,因此拥有私有设置器是多余的。如果你没有要变异的字段,那么将字段保留为私有字段,不要为这些字段创建setter。

So yes is the answer to your question.

如果你有理由不公开你的setter,那么你可以使用一个参数化的构造函数,它在创建这个类的对象时启动带有作为参数传递的值的字段,并在实例化对象时调用参数化构造函数。 / p>

答案 2 :(得分:0)

不能从您的单元测试用例中调用您的私有方法。所以要么你必须公开它,要么默认或保护(如果你把它放在同一个包中)。您通常不测试私有方法,因为它们只能(通常)通过另一个公共方法间接测试。当你试驾并制作私人方法时,它们通常是“提取方法”重构的结果,并且已经被间接测试。