下面是我的Cylinder类,然后是我试图用来测试我写的getLabel方法的JUnit测试。在测试用户输入的字符串时,我无法理解如何正确地形成测试方法。
public class Cylinder {
private String label = "";
private double radius;
private double height;
private static int count = 0;
/**
* Creates a new Cylinder object with a given label, radius, and height.
*
* @param label2 The name of the cylinder returned as a String.
* @param radius2 The radius of the cylinder as a double.
* @param height2 The height of the cylinder as a double.
*/
public Cylinder(String label2, double radius2, double height2, int count2) {
setLabel(label2);
setRadius(radius2);
setHeight(height2);
setCount(count2);
}
/**
* This method is respondible for getting the label from the user
* and returns a string representation of the label.
*
* @return String representation of the label of the Cylinder.
*/
public String getLabel() {
return label;
}
下面是我的JUnit测试类,我用它来为我的Cylinder类中的每个方法创建一个测试。
public class CylinderTest {
private String label = "";
private double radius;
private double height;
/*
*
*/
@Test public void labelTest() {
Cylinder c1 = new Cylinder("", radius, height);
String result = c1.getLabel(label);
Assert.assertEquals(" ", label);
答案 0 :(得分:-1)
在上面的代码中,您有效地测试了不是commonly accepted practice.
的getter和setter当您将标签传递给构造函数时,您希望它是Cylinder的标签。没有发生转变。您只需测试一个变量可以设置为一个值,该值不会中断。我们希望将测试重点放在行为上。
但是,在上面的labelTest中,您将一个空字符串传递给构造函数,但期望assertEquals中有一个空格字符。如果这是期望的行为,则需要进行测试。您还应该命名测试,以指出这种行为的原因(test_GetLabel_ExpandsEmptyStringToSpace或类似的东西)。
在您的代码中,我将更多地关注参数如何交互。例如,给定半径和高度,您可以编写一个体积测试,显示两个参数如何相互关联。例如
@Test public void test_VolumeCalculation() {
Cylinder c1 = new Cylinder("", 2.0, 4.5);
String actual = c1.getVolume();
Assert.assertEquals(56.55, actual, 0.001);
}
我遇到了一些参数混乱的代码,因此你可以考虑编写测试,显示半径和高度值被分配给正确的字段。由于它们都是双打的,因此可以以错误的顺序传递值,但测试只能证明您正确分配了值并且不会阻止调用者将它们混合起来。
您的代码在构造函数中也有四个参数,但在测试中只有三个参数出现在构造函数调用中。您可能想要清理问题以查明您的问题。