【问题标题】:Should the package contain unit tests/ test classes when the software has been passed to a client? JAVA当软件已传递给客户端时,包是否应该包含单元测试/测试类? JAVA
【发布时间】:2017-03-26 16:41:21
【问题描述】:

有人问我一个有趣的问题,但我不知道答案。 当软件已经传递给客户端时,包是否应该包含单元测试/测试类?

我认为可以禁用断言语句,因此从技术上讲,您可以在将软件提供给客户端之前禁用断言。这是正确的吗?

提前致谢。

【问题讨论】:

  • 仅作记录:您可以通过JVM 打开的本机java assert语句-ea / -enableassertions swich与单元测试.

标签: java unit-testing testing junit


【解决方案1】:

您永远不应该将(单元)测试交付到生产环境中。

如果您想为您的客户(使用您的 api 的程序员/客户)提供一个测试库,那很好。它不应包含在投入生产的主要工件中。

这背后的原因是:它减少了可攻击面。测试倾向于忽略/规避安全措施。让它们在生产中出现风险太大,没有任何好处。

【讨论】:

  • 感谢您的回答@k5_“它减少了可攻击的表面是什么意思?”
  • “可攻击的表面”基本上是指某人破坏您的程序的错误或可能性的数量。假设代码每行包含大约相等数量的错误。因此,您拥有的代码行数越多,您遇到的错误就越多。通过减少生产中的代码量,您可以减少错误的数量。此外,根据我的经验,测试中的代码质量很差,因此测试中每行的错误数量较高。
【解决方案2】:

我不同意另一个答案;因为真正的答案是:它取决于

更准确地说,这取决于您与客户签订的合同。如果您为他们编写了该软件;当然,您为该任务所做的一切很可能属于他们。包括各种项目/设置/测试源代码。

如果我们谈论的是您提供的一些产品可以使用;它仍然取决于。

k5_ 是正确的 - 不应在使用您的产品的生产环境中安装/执行单元测试。但是:客户收到(一些!)您的单元测试可能仍然是有益的。它可能有助于更好地了解您的应用程序是如何工作的。他们不会把它放在他们的服务器上;但如果需要,他们的开发人员可以查看您的测试。

但我同意;最后一点很不寻常;您可能宁愿将一些测试作为提供给客户的文档的一部分。

长话短说:这里的重要方面是了解这些单元测试“去哪里”的确切细节;以及可能以何种方式使用它们。

【讨论】:

    【解决方案3】:

    生产包不应包含单元测试。但是,当您交付软件时,您交付给客户的通常是源代码,通常是完整的存储库,而不仅仅是生产包:当然,它也包含单元测试。它们是可交付成果的重要组成部分。

    我认为断言语句可以被禁用,所以技术上你 可以在将软件提供给客户端之前禁用断言。是 这个对吗?

    Java 语言断言可以被禁用。但是,java 断言语句与单元测试中完成的 junit 断言无关。单元测试中的断言不会以同样的方式被禁用,单元测试只是在安装到运行环境时没有打包到产品中。

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多