相关疑难解决方法(0)

如何在Maven中按类别运行JUnit测试?

使用JUnit 4.8和新@Category注释,有没有办法选择与Maven的Surefire插件一起运行的类别子集?

例如,我有:

@Test
public void a() {
}

@Category(SlowTests.class)
@Test
public void b() {
}
Run Code Online (Sandbox Code Playgroud)

我想按照以下方式运行所有非慢速测试:(注意-Dtest.categories由我组成......).

mvn test -Dtest.categories=!SlowTests // run non-slow tests
mvn test -Dtest.categories=SlowTests // run only slow tests
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests
mvn test // run all tests, including non-categorized
Run Code Online (Sandbox Code Playgroud)

所以重点是我不想创建测试套件(Maven只是在项目中选择了非常方便的所有单元测试)并且我希望Maven能够按类别选择测试.我想我刚编了-Dtest.categories,所以我想知道是否有类似的设施我可以使用?

java junit categories maven maven-surefire-plugin

70
推荐指数
6
解决办法
5万
查看次数

如何使用Ant在类别/套件中运行所有JUnit测试?

我在类似于本答案中描述的设置中使用JUnit Categories和ClassPathSuite .回顾一下:

public interface FastTests {
}

@RunWith(Categories.class)
@Categories.IncludeCategory(FastTests.class)
@Suite.SuiteClasses(AllTests.class)
public class FastTestSuite {
}

@RunWith(ClasspathSuite.class) 
public class AllTests {
}
Run Code Online (Sandbox Code Playgroud)

... AllTests使用ClasspathSuite库.

属于FastTests类别的测试类如下所示:

@Category(FastTests.class)
public class StringUtilsTest {
    //  ...
}
Run Code Online (Sandbox Code Playgroud)

当我在IDE中运行"FastTestSuite"时,所有使用FastTests注释的测试都会执行,非常流畅:

在此输入图像描述

现在,我想用Ant做同样的事情.(令我惊讶的是,我无法在SO上轻松找到相关说明.)换句话说,我需要一个使用FastTests注释运行所有测试的Ant目标.

我试过一些简单的方法使用<test><batchtest>...

 <junit showoutput="true" printsummary="yes">
     <test name="fi.foobar.FastTestSuite"/>
     <formatter type="xml"/>
     <classpath refid="test.classpath"/>
 </junit>
Run Code Online (Sandbox Code Playgroud)

......但到目前为止没有运气.

编辑:除了IDE,它在命令行上与JUnitCore一起正常工作:

$ java -classpath "classes:WebContent/WEB-INF/lib/*" org.junit.runner.JUnitCore fi.foobar.FastTestSuite
.............
Time: 0.189

OK (13 tests)
Run Code Online (Sandbox Code Playgroud)

java ant junit junit4

22
推荐指数
1
解决办法
1万
查看次数

使用TestSuite时,我可以避免在eclipse中运行两次junit测试吗?

我需要进行一些套件初始化(启动Web服务器).它运行正常,除了当我在eclipse中运行我的项目中的所有测试时,我的测试运行了两次.我的测试套件看起来有点像这样:

@RunWith(Suite.class)
@Suite.SuiteClasses({
   SubtestOne.class,
   SubtestTwo.class
})
public class TestSuite
{
   [...]
}

public class SubtestOne
{
   @Test public void testOne() { [...] }
}

public class SubtestTwo
{
   @Test public void testTwo() { [...] }
}
Run Code Online (Sandbox Code Playgroud)

当我在eclipse中运行项目中的所有测试时,这导致junit插件运行测试两次,如下所示:

  • SubtestOne
  • SubtestTwo
  • 的TestSuite
    • SubtestOne
    • SubtestTwo

是否可以使"在项目中运行所有测试"不进行两次子测试?我希望我的子测试只能作为套件的一部分运行.

java eclipse junit junit4

16
推荐指数
2
解决办法
4728
查看次数

如何在Eclipse中运行单个JUnit测试方法?

在具有多个@Test注释的JUnit测试用例中,如何有选择地运行测试?

例如,从以下代码中,如何运行一个测试方法?

   @Test
   public void testHelloEmpty() 
   {
      assertEquals(h.getName(),"");
      assertEquals(h.getMessage(),"Hello!");
   }

   @Test
   public void testHelloWorld() 
   {
      // h.setName("World");
      assertEquals(h.getName(),"World");
      assertEquals(h.getMessage(),"Hello World!");
   }
Run Code Online (Sandbox Code Playgroud)

我试图突出显示一个@Test方法并尝试运行它,但它不能那样工作.

java eclipse junit

14
推荐指数
2
解决办法
1万
查看次数

新的JUnit 4.8.1 @Category渲染测试套件几乎已经过时了吗?

给出问题'如何运行属于某个类别的所有测试?' 答案是以下方法对测试组织更好吗?

  1. 定义包含所有测试的主测试套件(例如,使用ClasspathSuite)
  2. 设计足够的JUnit类别集合(足以表示每个理想的测试集合可由一个或多个类别识别)
  3. 使每个测试符合相关类别的资格
  4. 基于主测试套件和类别集定义目标测试套件

例:

  • 识别速度(慢速,快速),依赖(模拟,数据库,集成等),功能(填写适用类别),域(填写适用类别)等类别.
  • 要求每个测试都使用相关的类别进行适当的限定(标记).
  • 使用ClasspathSuite创建主测试套件(在类路径中找到所有测试)
  • 通过使用类别限定主测试套件来创建目标套件,例如模拟测试套件,快速数据库测试套件,域X测试套件的慢速集成等.

我的问题更像是征求这种方法与经典测试套件方法的批准率.一个无与伦比的好处是每个新测试都立即被相关套房包含,没有套件维护.一个问题是每个测试的正确分类.

java junit unit-testing junit4 test-suite

12
推荐指数
1
解决办法
3335
查看次数

如何在gradle中的测试任务中指定@category?

我想知道是否可以在gradle测试任务中指定@category.所以,我可以单独运行集成junits和正常的junit测试.

我知道目前在gradle中没有对@category的明确支持,我正在寻找这种限制的解决方法.

直接的方法是为不同的测试类别定义测试套件,例如,如何在JUnit 4中运行属于某个类别的所有测试.我更愿意在我的gradle脚本中指定@category.

junit gradle

8
推荐指数
1
解决办法
6621
查看次数

获取@Category在JUnit中的一组测试中出现的次数

我使用Java,Selenium,Junit,Maven开发了一整套自动化测试.

对于每个测试,它们都有一个或多个@Category注释,描述每个测试涵盖的软件区域.例如:

@Test
@Category({com.example.core.categories.Priority1.class,
           com.example.core.categories.Export.class,
           com.example.core.categories.MemberData.class})


@Test
@Category({com.example.core.categories.Priority1.class,
           com.example.core.categories.Import.class,
           com.example.core.categories.MemberData.class})


@Test
@Ignore
@Category({com.example.core.categories.Priority2.class,
           com.example.core.categories.Import.class,
           com.example.core.categories.MemberData.class})
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是找到一种方法来计算包含任何给定类别的测试数量.所有可能的类别都是文件//com/example/core/categories夹中的文件名作为源列表.

我已经尝试构建一个shell脚本来进行单词计数,这似乎工作正常,但我认为会有更多"内置"来处理@Category.

我最大的问题是,即使我得到正确的计数,很可能一个或多个测试被标记为@Ignore,这应该使测试@ Category的无效但没有大量使用标志并逐行读取每个文件为了它丢掉正确的计数.

是否有一个很好的方法来逐项列出@Ignore中的@ Category?

示例输出

| Category                                     | Count |
|----------------------------------------------|------:|
| com.example.core.categories.Export.class     | 1     |
| com.example.core.categories.Import.class     | 1     |
| com.example.core.categories.MemberData.class | 2     |
| com.example.core.categories.Priority1.class  | 2     |
| com.example.core.categories.Priority2.class  | 0     |
| com.example.core.categories.Priority3.class  | 0     |
Run Code Online (Sandbox Code Playgroud)

java junit

8
推荐指数
1
解决办法
292
查看次数

如何对大量JUnit测试进行分组/分类

在我们的项目中,我们目前有大量(junit)测试,分为三类:单元,集成,检票口.

我现在想要对这些测试进行分组,以便我只能运行其中一个(或两个)类别.我发现的唯一的东西是junit测试套件和类别,如下所述:http://www.wakaleo.com/component/content/article/267

我的问题是,我不想用@SuiteClasses在Test Suits中声明每一个测试.

有没有办法添加带有通配符/模式的套件类?

java junit

7
推荐指数
2
解决办法
1万
查看次数

从命令行运行JUnit Test suite

如何从命令行运行Junit 4.8.1测试套件?另外我想使用JUnit 4.8引入的类别,有没有一种方法可以从命令行指定我想要运行的类别.

java junit command-line junit4 categories

6
推荐指数
2
解决办法
6642
查看次数

使用Maven从@Category运行所有测试

我想只运行我的单元测试的一个子集,由特定的测试定义@Category.

所以我读了几个SO问题,比如这个(这正是我要找的),还有这个问题.

我的问题的解决方案似乎是由ClasspathSuite项目提供的.所以我开始编写定义我的测试类别的接口NewTestOldTest接口.然后,我创建了AllTests套件:

@RunWith(ClasspathSuite.class)
public class AllTests { }
Run Code Online (Sandbox Code Playgroud)

之后,我创建了一个AllNewTests套件:

@RunWith(Categories.class)
@IncludeCategory(NewTest.class)
@SuiteClasses( { AllTests.class })
public class AllNewTests { }
Run Code Online (Sandbox Code Playgroud)

最后,我创建了两个JUnit类,每个类别一个:

@Category(NewTest.class)
public class SomeNewTests {
    // some tests...
}

@Category(OldTest.class)
public class SomeOldTests {
    // some tests...
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行AllTests,Eclipse会启动我项目的所有测试,而Maven会因为没有找到测试而失败:

mvn test -Dtest=AllTests

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running my.company.AllTests
Tests run: 0, Failures: 0, Errors: 0, Skipped: …
Run Code Online (Sandbox Code Playgroud)

junit categories surefire maven

6
推荐指数
1
解决办法
6214
查看次数