2010-08-10 84 views
0

我们有一个简单的web服务来处理有关我们数据的查询。我想提出一组断言/案例扩展,这将提供测试响应各个方面的高级方法。例如,我可以编写assertResultCountMinimum(int)。该方法将负责构建查询,执行该查询并解压缩响应以验证数据。我也想要扩展Junit4或测试用例?

我想确保我脑海中有正确的想法,关于如何去做这件事。

首先使用正确的设置和拆卸方法创建一个我自己的测试用例类。为我们的目的,MyTestCase。然后提供一系列使用新的断言方法扩展Assert的类。这些类的最终用户将扩展MyTestCase并使用我创建的断言。这是我认为我在jWebUnit中看到的模式。

我觉得我在混合和匹配junit 3和4的概念。我很想拥有junit 4个概念。但我似乎无法在我的脑海中建立正确的方式来建立这个。此外,属于Junit的Assert类的断言方法都是静态的。我的一些断言需要重新查询web服务。这让我觉得我应该只是将断言提供为MytestCase中的一系列辅助函数。后来完成工作,但感觉不对。

任何见解,沉思,要求澄清,非常感谢。

后续编辑: 正如Jeanne建议的那样,我正在创建一个超级课程,其中包含我所有的设置/拆解方法&。实际上,我的断言实际上是辅助函数,它包含基本junit 4断言,我将其导入到我的超类中。我的任何测试将会扩展这个超级课程。我正在考虑的一个警告是制作超类抽象,因为不应该有超类的任何实例。

+0

我最终做了大致相同的事情。如果JUnit4将断言转化为静态调用有逻辑,我就没有看到它。 ( – 2010-08-12 17:15:32

回答

1

Marc, 我在JUnit 4中使用了两种模式。对于“实用程序类型”断言,我做了一个静态类。例如ReflectionAssertions。然后我使用静态导入在我的JUnit 4测试中使用这些断言。

对于仅在一个类中使用的本地类型断言,我将它们定义为JUnit 4测试类本身的常规方法。例如assertCallingMyBusinessMethodWithNullBlowsUp()。这些没有太多重用价值。

我不认为这个混合概念,因为后面的组在我的测试之外是不可重用的。如果我有可重用的断言,使Web服务调用(因此需要状态),我会创建一个超类TestCase并使用它。我的超类将有用于设置的状态和@Before方法。因此,这是测试的一部分。

+0

Jeanne,听起来像我在本地类型断言的第二种情况。这听起来像我使用相同的模式,谢谢你的答复。 – Marc 2010-08-16 17:44:15