我编写的代码主要供个人使用,但我正在考虑发布一个我最初开发用于个人用途的应用程序(科学模拟/可视化)。
我的一个习惯是在类中使用main方法来单独测试类的操作。我认为这在某种程度上可能是不好的(毫无疑问,其他各种习惯源于自学和科学发展环境)。然而,对于我注意到的自用东西来说,它从来都不是问题。
您是否都非常友好地确认(或否认)主管的扩散对于向科学界发布的应用程序而言是一个问题(来源也是开放的),如果是,为什么?
编辑:相对于一些提供的答案,扮演魔鬼的拥护者(好吧,我的拥护者):部分“应用程序使用”预计将由非开发人员(典型的科学家)进行小规模的源修改。我知道在接收端,对于直接构建到该类中的类进行测试对我来说非常简单,因此我可以相应地识别和修改(特别是如果这些类一直是这样的话)。使用像JUnit这样的东西会提供类似的效用吗,请记住观众?接受决定:我认为KLE的答案是彻底和简洁的最佳平衡,所以我选择了它,但我认为Bill的讨论评论也非常有帮助。我也不明白为什么约翰内斯的答案被否决 - “这件作品如何运作”的观点对于科学界的编码员来说非常重要 - 而其他答案指出了为什么分离单元测试可能比我的更有用的各种原因目前的习惯,他们并没有真正解决这个问题,所以他的答案远非“无益”。感谢所有当前(和未来)的响应者,并且希望有一种方法可以将多个响应组合为正确的答案!
答案 0 :(得分:12)
在自己的main方法中测试你的类是不好的,因为它给了类一个额外的责任(测试自己)。测试应该在不同的类中进行,最好使用像JUnit这样的测试库。
主电源的激增(我喜欢你创造的这句话)也让开发人员在第一次接近应用时找到应用的入口点时更加困惑。
答案 1 :(得分:6)
首先,你正在编写测试是很棒的。我真的不喜欢在项目中的许多类中使用main方法的方法。我主张将测试代码移出并使用测试框架。这使源代码更加清晰,如果您对测试类使用一致的命名方法,也很容易找到相关的测试。
答案 2 :(得分:6)
JUnit可让您进行测试,就像您的主电源一样,但也可以:
答案 3 :(得分:3)
这并不可怕,但不建议这有两个原因:
这是(2)你应该真正专注于。
答案 4 :(得分:2)
您需要使用JUNIT等测试工具对类进行测试,而不是将测试代码插入到生产代码中。
这样可以将测试与代码完全分开。
答案 5 :(得分:0)
这种方法本身没有任何问题,但有一个主要缺点:您必须单独调用每个main()
方法来测试所有代码。你可能不会。这太多了。此外,在执行此操作时,您必须知道哪些main()
方法是真正的入口点,哪些是测试。这根本不是显而易见的。
使用JUnit和类似工具,您可以将代码标记为“这是一个测试”。这允许工具自动查找项目中的所有测试并立即运行所有测试。通过这种方式,您可以在大多数情况下运行所有测试,并且可以及早发现错误。
答案 6 :(得分:0)
我也不会在所有类中使用main方法进行测试。首先,遵循关注点分离规则(使用和测试是不同的关注点),因为我们有优雅的测试解决方案。
其次,到目前为止还没有提到过,如果每个类都有一个main方法,那么很难找到应用程序中的“真实”入口点。如果我看到一个带有main方法的类,我希望这会让我以预期的方式“使用”该类。我不指望,这将开始一个测试用例(可能有严重的副作用)。
啊,只是我想到的第三个方面:主要方法总是公开的,因此您的库的用户可以随时使用这些方法,甚至可以在执行他自己的应用程序时使用这些方法。这可能会产生可怕的副作用,尤其是在多线程环境中。