2015-12-22 36 views
3

我有一堆用硒和NUnit运行的自动UI测试。破解里面的NUnit测试

在每次nunit测试之后,我想检查浏览器是否有任何发生的JS错误。如果有任何JS错误,导致它们的测试应该失败。我希望这可以运行我写的所有测试,而不必将检查复制到每个测试中。

我还截取任何失败的截图。

[TearDown] 
    public void TearDown() 
    { 
     Assert.Fail("Some JS error occurred"); //This is to simulate a JS error assertion 

     if (TestContext.CurrentContext.Result.Status != TestStatus.Passed) 
     { 
      Driver.TakeScreenshot(TestContext.CurrentContext.Test.Name, "Failed"); 
     } 
    } 

如果我不能断言内拆除它永远不会执行截图代码(如断言是一个例外)。

有没有更好的方法来使测试失败,以便我可以继续我的逻辑?

+0

你为什么要调用失败断言? – Steve

+0

@steve“每次测试后,我想检查浏览器是否有任何JS错误发生,如果有任何测试失败”我会澄清一点代码 –

+0

我仍然不明白你为什么要在拆除?难道你没有一个标准的测试来检查JS错误和通话失败吗? – Steve

回答

0

如果你想在每次测试后检查同样的东西,你可以使用你在每次测试中自己调用的常用方法。这样你就不会复制测试代码,并且可以保持断开状态。

例如,

[Test] 
public void Test1() 
{ 
    // sometest code 
    TestJS(); 
} 

[Test] 
public void Test2() 
{ 
    // some other test code 
    TestJS(); 
} 

public void TestJS() 
{ 
    Assert.Fail("Or whatever to test the JS"); 
} 

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Status != TestStatus.Passed) 
    { 
     Driver.TakeScreenshot(TestContext.CurrentContext.Test.Name, "Failed"); 
    } 
} 
+0

是的,这将工作,但它不是非常干,它需要我记住TestJS在每次测试结束。事实上,这是一个基础类,有很多测试挂钩它。我宁愿在拆解时做这件事。 –

2

您可以扩展自己的TestActionAttribute运行您的JS测试。如果在AfterTest()中引发断言失败,NUnit似乎报告测试失败。

E.g.这样的:

[CheckForJSErrors] // your custom attribute - applies to all tests 
public class ClassTest 
{ 
    [Test] 
    public void MyTest() 
    { 
     // Your test case 
    } 
} 

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] 
public class CheckForJSErrorsAttribute : TestActionAttribute 
{ 
    public override void AfterTest(TestDetails testDetails) 
    { 
     // if you only want to check for JS errors if the test passed, then: 
     if(TestContext.CurrentContext.Result.Status == TestStatus.Passed) 
     { 
      Driver.TakeScreenshot(testDetails.FullName, "Failed"); 
      Assert.Fail("Some JS error occurred"); //This is to simulate a JS error assertion 
     } 
    } 
    public override ActionTargets Targets 
    { 
     // explicitly says to run this after each test, even if attr is defined on the entire test fixture 
     get { return ActionTargets.Test; } 
    } 
} 

生成此故障在NUnit的:

SO_34306757.ClassTest.MyTest: TearDown : NUnit.Framework.AssertionException : Some JS error occurred

我已经宣布整个测试夹具,以避免宣布它在每个测试用例[CheckForJSErrors]属性,但你可以如果需要,可以按照测试方法进行声明。

+0

这是一个很好的检查方法,我比基础类更喜欢它。但我只想对失败的测试或JS错误的检测截图 –