对不起这样一个loooong帖子!!
我是编码/自动化测试的新手。我有VS 2013 Ultimate并创建了一个带有断言的CodedUI测试,它运行良好。但是,当断言失败时,测试停止。我知道这个问题已被多次询问,我已经尝试了所示的解决方案,但我没有运气。我希望测试在失败发生后继续运行。
我正在测试.net应用程序,在应用程序中我们有几个搜索字段,我想验证一下,如果我搜索单词' test'搜索结果将包含' test'在里面。我对一个没有“测试”字样的单元格做了断言。在它和预期中,断言失败了。
我希望测试继续运行,以便我可以搜索所有其他字段,但一旦断言失败就会停止。
当我在我使用的单元格上执行断言时,包含'包含'而不是'AreEqual'似乎有道理,因为我正在寻找'测试'在地址的任何部分(即使它说的是' 1 wetester dr')
这是encodeUITest1.cs脚本中代码的一部分:
//From the CodedUITest1.cs file
[TestMethod]
public void TestAddressSearchFields()
{
this.UIMap.SearchAddressFor_test();
this.UIMap.Assert_on_FirstAddressCellForTheWord_test();
this.UIMap.SearchNextThing();
this.UIMap.SearchAnotherThing();
}
---------------------------------------------------------------------------------------
//来自UIMap.Designer.cs文件(这是断言的定义)
public void Assert_on_FirstAddressCellForTheWord_test()
{
#region Variable Declarations
WinCell uIItem800SROLLINGRDCell = this.UIDPSClaimantSearchWindow.UIGrdClaimantSearchWindow.UIDataGridViewTable.UIRow6Row.UIItem800SROLLINGRDCell;
#endregion
// Verify that the 'Value' property of '800 S ROLLING RD' cell contains 'test'
StringAssert.Contains(uIItem800SROLLINGRDCell.Value, this.Assert_on_FirstAddressCellForTheWord_testExpectedValues.UIItem800SROLLINGRDCellValue, "Address does not contain the word \"test\"");
}
//And then the definition for the cell value
[GeneratedCode("Coded UITest Builder", "12.0.30501.0")]
public class Assert_on_FirstAddressCellForTheWord_testExpectedValues
{
#region Fields
/// <summary>
/// Verify that the 'Value' property of '800 S ROLLING RD' cell contains 'test'
/// </summary>
public string UIItem800SROLLINGRDCellValue = "test";
#endregion
}
I tried the following but it didn't work, once the assertion failed, the test stopped (is it because the failure is not an exception?)
this.UIMap.SearchAddressFor_test();
try
{
this.UIMap.Assert_on_FirstAddressCellForTheWord_test();
}
catch (Exception theword_test_not_found)
{
throw (theword_test_not_found);
}
{
Playback.PlaybackSettings.ContinueOnError = true;
}
对不起这么长的帖子,请记住我是新手,请温柔!
答案 0 :(得分:0)
如果您真的想在一个测试中测试多个条件,可以将此行添加到测试的顶部。
{{1}}
答案 1 :(得分:0)
将这样的测试分开并且运行起来可能非常耗时是非常繁琐的。
我会推荐一些东西。首先,考虑手动编写CodedUI测试,而不是使用记录和播放。这将让您拥有更多可配置,可重复使用的块。
Code First是一个很好的开始。
我还有一些basic examples,它们展示了一些编写可重用测试的技巧。
现在,关于为你描述的每一件事写一个测试。我们发现,如果它们是可恢复的测试,那么在单个测试中测试几个条件是相当不错的。我仍然建议尽可能地打破测试。
在你的情况下,我会说,如果到达你正在测试的页面的时间很长,或者满足前提条件的时间很长,或者耦合错误的可能性是高。跟踪并修复名称字段的错误会发现状态字段也有一个错误可以被同一个测试捕获,这很烦人。
[TestInitialize]
public void GivenTimeConsumingPreConditions()
{
// do time consuming steps
}
[TestMethod]
public void WhenManipulatingTabs_ThenSearchFiltersResults()
{
// depending on how you want to iterate, this is a super simple example
string[] tabs = new ["Products", "Customers"];
List<Exception> exs = new List<Exception>(tabs.Length);
foreach(string tabName in tabs){
OpenTab(tabName);
EnterTextIntoSearchBox("test");
ClickSearch();
try {
Assert.IsTrue(AllResultsContain("test"));
} catch(Exception e) {
exs.Add(e);
}
}
if(exs.Any()){
throw new AggregateException(exs);
}
}
这样做可以确保如果由于某些其他原因导致测试失败(例如,选项卡无法打开),则测试仍然会立即失败,因此您只会聚合预期可能组合在一起的异常。 (例如,搜索在所有选项卡和单个选项卡上都不起作用)。
答案 2 :(得分:0)
这可能会有所帮助。标记您的测试方法以期待异常(当您没有找到&#34;测试&#34;单词)并抓住它时,您可以随意使用它。 以下是我在单元测试中处理预期异常的方法 -
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void HoofNotesUtilitiesCreateDirectoryTest()
{
try
{
// Test whether it throws an exception
// It'd better, * is not a valid directory name
// when you are creating one
HoofNotesUtilities.CreateDirectory("*");
}
catch (System.ArgumentException e)
{
if (e.Message == "Illegal characters in path.")
{
// You got the exception that you expected - GREAT
// Do whatever you need to do with it here.
// THEN rethrow it, because the test expects it.
// If you don't, the test will fail and stop.
throw;
}
else
{
// Wrong exception, fail the test
Debug.Assert(false);
}
}
}