1

我正在为我的应用程序设计一些测试用例。假设我有一个名为

ProcessedDataObject createProcessedDataObject(RawDataHolder input)

的性能createProcessedDataObject至关重要,因此我想包括一些针对恒定输入的基准性能测试(例如input,从本地文本文件构建,因此它不会变化),如果以后每次修改需要超过一定数量的 nanos,则失败方法。IOW,我希望测试的设计能够引发危险信号,以防未来的变化增加复杂性以超过时间基准。

我的问题是:基准性能测试是否属于 JUnit 领域,还是应该将其保留在外部?

4

2 回答 2

2

如果您只是在寻找一个大概的估计,那么 JUnit 就可以了。但是,您不想在构建时使用的测试套件中包含基准,因为这会减慢构建速度。如果您希望发布您的基准,那么在我看来,不应该使用 JUnit。

于 2013-04-02T00:25:42.280 回答
1

我建议您将测试用例拆分为功能性单元测试和非功能性集成测试。如果您使用的是 Maven,您可以使用Surefire + Failsafe来实现这一点。您仍然可以将性能测试编写为 JUnit 测试,但这样可以在逻辑上将它们分开,从而将功能测试和性能测试分开。

在不太了解您的实现的情况下,我假设您的性能测试实际上是集成测试,无论如何......

正如评论所暗示的那样,您需要注意您的通过/失败标准和阈值。

例如,如果我的测试限制是 100 毫微,它需要 101 毫微,这是否足以使构建失败?我应该运行相同的测试 10 次并取平均值吗?我是否应该运行 10 次相同的测试并确保每次都低于阈值?我应该进行多少次试运行?所有这些(以及更多)都是您应该考虑的因素。

于 2013-04-02T04:04:27.100 回答