我有一个绘制圣诞树的maven项目。我需要对其进行单元测试,但我不知道该怎么做:/
我已经在Maven项目中设置了JUnit
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 10 - i; j++)
System.out.print(" ");
for (int k = 0; k < (2 * i + 1); k++)
System.out.print("*");
System.out.println();
}
答案 0 :(得分:1)
假设您的班级绘制圣诞树看起来像这样:
class ChristmasTreeDrafter {
void draw() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 10 - i; j++)
System.out.print(" ");
for (int k = 0; k < (2 * i + 1); k++)
System.out.print("*");
System.out.println();
}
}
}
您可以通过这种方式对其进行测试:
public class ChristmasTreeDrafterTest {
private final ByteArrayOutputStream out = new ByteArrayOutputStream();
@Before
public void setup() {
System.setOut(new PrintStream(out));
}
@Test
public void shouldDrawChristmasTree() {
// given
ChristmasTreeDrafter christmasTreeDrafter = new ChristmasTreeDrafter();
// when
christmasTreeDrafter.draw();
// then
Assert.assertEquals(" *\r\n" +
" ***\r\n" +
" *****\r\n" +
" *******\r\n", out.toString());
}
}
在setup
方法中,标准输出流被重定向到out
对象,因此,您可以在then
块中验证其内容。不幸的是,Java没有多行字符串,因此这段代码很难看。为了提高可读性,您可以将此内容提取到test/resources
下的文件中(假定使用默认的maven项目结构)。
答案 1 :(得分:0)
从高层次上讲:该代码的目的是打印由星号制成的树或三角形。测试很简单,运行代码,看看它会生成所需的输出。
由于代码正在打印到System.out,因此您需要将System.out重定向到文件或字符串(请参见this),然后将生成的输出与所需的输出进行比较,以查看代码是否在运行正确地