相关疑难解决方法(0)

如何使用Cucumber重新运行失败的场景?

我正在使用Cucumber进行测试.如何仅重新运行失败的测试?

cucumber

45
推荐指数
2
解决办法
3万
查看次数

在JUnit 4.11中结合@ClassRule和@Rule

在JUnit 4.10及更低版本中,可以将规则注释为@Rule和@ClassRule.这意味着规则在类之前/之后以及每次测试之前/之后被调用.这样做的一个可能原因是设置昂贵的外部资源(通过@ClassRule调用),然后便宜地重置它(通过@Rule调用).

从JUnit 4.11开始,@ Rule字段必须是非静态的,而@ClassRule字段必须是静态的,因此上述内容不再可能.

有明确的解决方法(例如,明确地将@ClassRule和@Rule职责分离为单独的规则),但是必须强制使用两个规则似乎是一种耻辱.我简要介绍了使用@Rule并推断它是否是第一个/最后一个测试,但我不相信这些信息是可用的(至少,它不能直接在描述中获得).

在JUnit 4.11的单个规则中是否有一种干净整洁的@ClassRule和@Rule功能组合方式?

谢谢,罗恩

java junit junit4 junit-rule

20
推荐指数
2
解决办法
9484
查看次数

如何在测试套件中定义JUnit方法规则?

我有一个JUnit测试类的JUnit套件.如果在该测试方法上存在某个注释,我想套件定义一个规则,以便在运行每个单元测试之前和之后对数据库执行某些操作.

我已经能够在套件和测试类中创建一个@ClassRule,它将在每个之前执行此操作(这不够好)并且我已经能够使用测试类本身定义测试规则,但是这样是重复的,似乎不是很干.

是否可以在套件中定义每个测试方法规则,还是必须将它们添加到每个测试中?

编辑:为了澄清,我想在套件中声明代码,它将在测试类中的测试方法之间运行(即"围绕").

java junit junit4

11
推荐指数
1
解决办法
9905
查看次数

如何将JUnit @Rule应用于套件中的所有测试用例

我正在使用JUnit 4.10来运行测试套件,并且我已经实现了一个"重试失败测试"规则,遵循Matthew Farwell在如何立即重新运行失败的JUnit测试中的精彩笔记帖子.我用以下代码创建了一个"RetryTestRule"类:

public class RetryTestRule implements TestRule {

  private final int retryCount;

  public RetryTestRule(int retryCount) {
    this.retryCount = retryCount;
  }

  @Override
  public Statement apply(Statement base, Description description) {
    return statement(base, description);
  }

  private Statement statement(final Statement base, final Description description) {
    return new Statement() {
      @Override
      public void evaluate() throws Throwable {
        Throwable caughtThrowable = null;

        // retry logic
        for (int i = 0; i < retryCount; i++) {
          try {
            base.evaluate();
            return;
          } catch …
Run Code Online (Sandbox Code Playgroud)

java junit junit4

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

处理在自动部署期间偶尔失败的Selenium测试

我们有一个C#/ ASP .Net Web应用程序,由构建服务器(Jenkins)构建和部署.自动部署之前的构建步骤之一是确保所有自动化测试都通过 - 包括使用Selenium 2 WebDriver和NUnit进行的功能测试.

问题:有时候这些测试会随机失败.他们将成功完成100个构建,然后一个失败.它们由于各种原因而失败 - 一个.Click()事件被忽略,元素无法找到,IE有一个糟糕的一天等等.我们有一个AJAX沉重的Web应用程序,因此我们非常依赖WebDriverWaits但我们总是采取在编写测试时考虑到这一点,就像我说测试确实在大部分时间都通过了.

有哪些方法可以避免或解决这个问题?一对夫妇,我想到了:

  • 接受一定数量的失败(似乎是一个坏主意)
  • 重新运行测试失败?

automated-tests jenkins selenium-webdriver

8
推荐指数
2
解决办法
5830
查看次数

使用Junit重新运行失败的测试

我正在努力改进现有的自动化Selenium测试系统.我的目标是重复因连接问题而失败的测试.我发现并试图遵循这个线程如何立即重新运行失败的JUnit测试?这表明它非常有用.

在我的情况下,套件由类组成,所以我试图用@ClassRule替换@Rule,以便重复每次尝试@Before和@After部分.对不起我很抱歉,但我应该把这个规则放在哪里?在我的套件课程中?或者在代表测试的类中?

java testing junit

8
推荐指数
2
解决办法
3311
查看次数

如何在Espresso中重新运行失败的测试? - 头脑风暴

我想弄清楚,如何使用Espresso重新运行失败的测试.我认为从常见的JUnit测试案例来看,这有点复杂,因为您需要在测试开始之前恢复应用中的状态.

我的方法是创建自己的ActivityTestRule,所以我只是从这个类中复制了整个代码,并将其命名为MyActivityTestRule.

在仪器测试的情况下,规则还需要有关我们如何开始活动的信息.我更愿意自己推出它而不是为我做环境.例如:

    @Rule
    public MyActivityTestRule<ActivityToStartWith> activityRule = new MyActivityTestRule<>(
           ActivityToStartWith.class, true, false
    );
Run Code Online (Sandbox Code Playgroud)

所以我也在@Before注释方法中启动我的活动:

   @Before
    public void setUp() throws Exception {
        activityRule.launchActivity(new Intent());
    }
Run Code Online (Sandbox Code Playgroud)

并在@After注释方法中进行清理:

    @After
    public void tearDown() throws Exception {
        cleanUpDataBaseAfterTest();
        returnToStartingActivity(activityRule);
    }
Run Code Online (Sandbox Code Playgroud)

这些方法 - setUp(),tearDown()是每次测试运行之前/之后调用的必要条件 - 以确保测试开始期间的应用程序状态是正确的.


在MyActivityTestRule中,到目前为止我做了一些修改.首先是应用方法的变更来自:

    @Override
    public Statement apply(final Statement base, Description description) {
       return new ActivityStatement(super.apply(base, description));
    }
Run Code Online (Sandbox Code Playgroud)

这对我来说是未知的,但是事情,如ActivityStatement放在ActivityTestRule有super.apply方法,因此也包装测试语句UiThreadStatement:

public class UiThreadStatement extends Statement {
    private final Statement mBase;
    private final boolean mRunOnUiThread;

    public UiThreadStatement(Statement base, boolean runOnUiThread) {
        mBase = base; …
Run Code Online (Sandbox Code Playgroud)

java junit android unit-testing android-espresso

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

如何在每个JUnit @Test方法之前单独运行一些代码,而不使用@RunWith和AOP?

用例很简单:我想在使用@Test注释的JUnit测试中的每个方法之前运行一些样板代码我的自定义注释(让我们称之为@Mine).

我不想使用以下方法(括号中的解释):

  1. @RunWith(我的测试可能,或者可能不会使用此注释,所以我不能假设我能够使用自己的跑步者)
  2. AOP(我不能对第三方库,例如AspectJ做任何依赖)

我想这只留给我反思,这对我很好.我想通过使用@Before并通过Thread.getCurrentThread()等获得当前的方法,但不知怎的,我觉得这个解决方案有点脏,因为我必须在这个方法中再次制作锅炉板代码来激发反射(和避免任何不必要的代码是首先的目标).

也许你有其他一些想法?

java reflection junit aop

4
推荐指数
1
解决办法
5941
查看次数

如何使Spock重试失败的Geb测试?

我有一个使用Geb和Spock的Grails应用程序的功能测试.偶尔,功能测试将因超时或其他偶发行为而失败.在之前使用TestNG的项目中,我有一个retryAnalyzer只是在测试执行期间触发重试,以查看它是否两次都失败(然后真实失败).

如何让Spock重试失败的测试?

grails groovy spock geb

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