我正在使用一个遗留项目:
我正在寻找使用Ant 单独运行两种类型测试的最简单方法.
我想知道是否有办法让Ant根据继承层次结构自动识别这两个类别:
StringUtilsTest extends TestCase // "pure unit test"
Run Code Online (Sandbox Code Playgroud)
VS
ProductionDBTest extends AbstractTransactionalTesterBase // "integration test"
Run Code Online (Sandbox Code Playgroud)
集成测试所基于的是抽象超类的层次结构,但它们都归结为一些Spring测试类,最终AbstractSpringContextTests扩展到了它们junit.framework.TestCase.
换句话说,我可以在Ant中区分(间接)扩展的AbstractSpringContextTests测试和直接扩展的测试TestCase吗?或者我是否必须手动完成测试,例如将它们放在单独的类别或TestSuite中?(有很多测试,所以我不想这样做.)
解决方案:我尝试过肖恩(非常有前途)的方法,但无法轻松实现(轻松).所以我最终半手动地完成了测试,使用这个SO问题中描述的设置注释纯粹的(这是较小的组),并像这样用Ant运行它们.(请注意,编写自定义TestRunner 不是必需的.)
我已经阅读了一些JUnit和TestNG的比较,看起来TestNG有更多的配置选项.另一方面,IDE更多支持JUnit,构建工具,拥有更多插件.
我没有编写单元测试的经验.我应该选择哪种工具?
PS我认为我的问题更像是:我应该尝试一下TestNG,还是像其他人一样坚持使用JUnit?
PS我们开发Web应用程序,因此我认为选择时还应考虑我们稍后将使用Selenium进行功能测试.
我有两个逻辑类别的测试:简单的功能单元测试(通过/失败)和基准性能测试,仅用于度量/诊断.
目前,我在一个类中有所有测试方法,称之为MyTests:
public class MyTests
{
@Test
public void testUnit1()
{
...
assertTrue(someBool);
}
@Test
public void testUnit2()
{
...
assertFalse(someBool);
}
@Test
@Category(PerformanceTest.class)
public void bmrkPerfTest1()
{
...
}
@Test
@Category(PerformanceTest.class)
public void bmrkPerfTest2()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个UnitTestSuite定义为
@RunWith(Categories.class)
@Categories.ExcludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class UnitTestSuite {}
Run Code Online (Sandbox Code Playgroud)
和a PerformanceTestSuite
@RunWith(Categories.class)
@Categories.IncludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class PerformanceTestSuite {}
Run Code Online (Sandbox Code Playgroud)
所以我可以Ant单独从性能测试中运行单元测试(我不认为包含Ant代码是必要的).
这意味着我总共有四个类(MyTests,PerformanceTest,PerformanceTestSuite和UnitTestSuite).我意识到我可以将所有单元测试放在一个类中,并在另一个类中进行基准测试并完成它,而不会增加类别和额外注释的复杂性.我在Ant中调用类名测试,即不在包中运行所有测试.
是否有意义以及使用注释按类别组织它的原因是什么?如果我只是在两个简单的测试类中重构它会更好吗?
我们的测试套件正在快速增长,我们已经达到了功能测试依赖于其他系统的程度.
我们使用gradle测试任务来使用包含和排除过滤器来运行这些测试,但这变得很麻烦,因为我们必须以特定方式命名我们的测试.
我们目前的方法是以下列方式命名我们的测试:
class AppleSingleServiceTest {}
class BananaMultiServiceTest {}
class KiwiIntegrationTest {}
Run Code Online (Sandbox Code Playgroud)
然后在相关任务中包含测试
include '**/*SingleServiceTest.class'
include '**/*MultiServiceTest.class'
include '**/*IntegrationTest.class'
Run Code Online (Sandbox Code Playgroud)
是否可以通过查看注释在gradle中找到测试类?
@SingleServiceTest
public class AppleTest {}
Run Code Online (Sandbox Code Playgroud)
我认为任何未注释的测试都将作为正常的单元测试运行,因此如果您忘记注释更多功能测试,它将失败
单个服务测试的一个示例是硒测试,其中SUT的任何外部依赖性都是存根的
多服务测试的一个示例是一些但可能不是所有外部依赖项都没有存根的测试