【问题标题】:Have JUnit fail tests that don't actually run an assertion让 JUnit 失败的测试实际上并没有运行断言
【发布时间】:2017-01-26 04:00:47
【问题描述】:

我的团队正在努力对我们的一些开发人员进行有关测试的教育。他们明白为什么要编写测试,并且同意他们应该编写测试,但是在编写好的测试方面有些不足。

我刚刚看到一个这样的提交

public void SomeTest{

@Test
public void testSomething{
 System.out.println(new mySomething.getData());
}

因此,他们至少可以通过查看确保他们的代码为他们提供预期的输出。

我们还需要一段时间才能真正推销代码审查的想法。与此同时,我正在考虑让 JUnit 使任何没有实际 assertXXX 或失败语句的测试失败。然后我想让那个失败消息说“你的测试应该使用断言并实际检查输出!”。

我完全希望这会导致像assertTrue(1 == 1); 这样的电话。我们正在与团队合作进行适当的测试和代码审查,是否有任何技术机制可以用来让已经获得它的开发人员的生活更轻松?帮助新手理解的技术机制如何?

【问题讨论】:

    标签: testing junit


    【解决方案1】:

    我认为您应该考虑组织变革:指导、培训、代码审查。

    只有在对目标有基本了解的情况下善意使用这些工具才能为您提供帮助。如果缺少其中之一,它们将无济于事。

    人类只是聪明地去做转储事情或解决指标。如果他们不能编写一个有用的测试,我认为您的评估是不正确的,即“他们”在船上。在这个阶段,自动工具根本不是正确的工具。程序告诉你下一步该做什么是无法学习的。

    【讨论】:

    • 我支持您让人们接受并接受教育。我正在寻找更多工具来帮助其他开发人员,并且我会监控代码,以便当我们发现一个不好的测试时,我们可以标记它并与仍在学习的人交谈。
    【解决方案2】:

    你可以使用一些静态代码分析器。

    我使用PMD,其中包括JUnit rule set。有很多 IDE plugins 会在 IDE 中标记违反规则的行为。您可以根据需要配置规则集。

    您还将受益于其他规则集 - 它会警告您违反代码风格/最佳实践(尽管有时您必须决定是该工具还是您是傻瓜:-))。

    【讨论】:

      【解决方案3】:

      为未来的观众回答所述问题。

      JUnit 使用反射来运行测试函数,如果任何异常,抛出错误 -> 测试失败,否则成功。 Assert 类只是一个 utils 类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-31
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多