我正在玩Coded UI Tests,为calc.exe应用程序编写一些测试。我正在尝试使用ClassInitialize来打开应用程序,这样我的所有测试都可以在应用程序打开的情况下运行,而不是每次都必须打开和关闭应用程序。
我是通过Google搜索找到的:http://www.codesmartnothard.com/CommentView,guid,f28e6205-1ac5-41f3-be0d-f84d7db5c79b.aspx但它没用。如果这实际上是它所需要的全部工作,那将是非常棒的。当我尝试它时会发生ClassInitialize函数运行,应用程序打开,然后在第一次测试尝试运行之前立即关闭,所以当测试运行时,应用程序不再打开,并且在一段时间没有发生任何事情后不可避免地会失败
如何使用ClassInitialize打开应用程序并保持打开以使测试实际运行?
当我有以下代码时,我的测试运行:
[CodedUITest]
public class CodedUITest1
{
[TestMethod]
public void CodedUITestMethod1()
{
UIMap.OpenCalc(); //Opens calc.exe
UIMap.Click1(); //Clicks the "1" button
UIMap.CloseCalc(); //Closes application
}
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
private TestContext testContextInstance;
public static UIMap UIMap
{
get
{
if ((map == null))
{
map = new UIMap();
}
return map;
}
}
private static UIMap map;
}
但是,如果我添加此ClassInitialize方法,并在TestMethod中删除对OpenCalc的调用,它将不再起作用。计算器打开,然后因任何原因立即关闭。
[ClassInitialize]
public static void ClassInit(TestContext context)
{
Playback.Initialize();
try
{
UIMap.OpenCalc();
}
finally
{
Playback.Cleanup();
}
}
答案 0 :(得分:2)
ClassInitilize非常混乱这样,我基本上像构造函数一样使用它来在测试开始时声明一些变量。虽然有很多更好的方法可以做你想做的事。
如果我是你,我会制作多个[TestMethods]并制作一个orderedTest文件,然后指定你想要的顺序(即。首先放置openCalc()方法),如下所示。
[TestMethod]
public void OpenCalc()
{
UIMap.OpenCalc(); //Opens calc.exe
}
[TestMethod]
public void CodedUITestMethod1()
{
UIMap.Click1(); //Clicks the "1" button
UIMap.CloseCalc(); //Closes application
}
现在右键单击您的项目,然后单击新项目orderedTest。然后你可以按照你想要的顺序放置测试方法,当你运行openCalc()方法时,它应该保持打开以进行剩余的测试。
然后基本上在测试资源管理器中,您只需运行有序的测试文件而不是测试方法。
答案 1 :(得分:1)
[ClassInitialize]被调用一次。还有一个[AssemblyInitialize]在任何[ClassInitialize]方法(或将要运行)之前调用。 UIMap map
字段通常是类实例的成员,而不是类的静态,因此[ClassInitialize]方法无法访问它。您的代码声明UIMap map
是静态的,这可能会在许多测试用例中引入问题。
您希望在运行测试之前启动应用程序,以便它可以用于所有测试用例。 .testsettings
文件允许指定启动和清理脚本。您可以在这样的脚本中启动应用程序。要创建.testsettings
文件,请在解决方案资源管理器中右键单击解决方案,然后选择Add =>新物品。您还必须通过Menu =>选择.testsettings
文件。测试
答案 2 :(得分:1)
为防止关闭窗口我这样做, 我使用的是Web应用程序,但我认为这会有所帮助。
首先我使用
声明窗口window = BrowserWindow.Launch(new Uri("http://www.bing.com"));
然后我设置了窗口的属性
window.CloseOnPlaybackCleanup = false;