【问题标题】:How can i apply Unit Testing on my simple algorithm?我如何在我的简单算法上应用单元测试?
【发布时间】:2019-05-27 13:49:33
【问题描述】:

我有一个绘制圣诞树的 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();
  }

【问题讨论】:

  • 这不是一个“为我编码”的网站。您需要为将来的特定问题提供minimal reproducible example
  • 我知道,但我还是个学生。搜索了很多关于 TDD 的文件,但仍然不知道如何对这些简单的算法进行测试。

标签: java unit-testing junit


【解决方案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 项目结构)。

【讨论】:

  • 这确实是我想要的。谢谢你 。我将尝试在我的代码上实现这一点,看看它是怎么回事。
  • 太好了!如果符合您的期望,请考虑接受我的回答。
  • 成功了!非常感谢伙计。这是我第一次尝试做测试,这个算法有点不同。我无法弄清楚如何测试它并且我还在学习 java 我想不出我可以使用缓冲区。
【解决方案2】:

在高层次上:该代码的目的是打印由星号组成的树或三角形。测试很简单,运行代码并查看它生成所需的输出。

由于代码正在打印到 System.out,您需要将 System.out 重定向到文件或字符串(请参阅this),然后将生成的输出与所需的输出进行比较,以查看代码是否正常运行。

【讨论】:

  • 首先感谢您的想法。现在我将尝试获取这棵树的输出并尝试在我的测试方法中进行测试,看看它是否等于我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2023-03-05
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多