在VS2012中执行测试,在执行期间,脚本调用程序(记事本)。我需要这个程序在测试结束时不关闭。有人帮我解决这个问题吗? 示例代码:
[TestMethod]
public void TestVoid()
{
}
[TestInitialize]
public void MyTestInitialize()
{
Process[] processes = Process.GetProcessesByName("Notepad");
if (processes.Length > 0)
{
_app = ApplicationUnderTest.FromProcess(processes[0]);
}
else
{
_app = ApplicationUnderTest.Launch(@"C:\Windows\System32\notepad.exe");
_app.CloseOnPlaybackCleanup = false;
}
}
[TestCleanup]
public void MyTestCleanup()
{
}
答案 0 :(得分:0)
我喜欢我的ApplicationUnderTest
是从头到尾使用的类或全局变量。所以,我在这里创建变量:
public static class GlobalVariables
{
public static ApplicationUnderTest App;
}
然后我在我的TestInitialize()
中初始化它:
[CodedUITest]
public class WinFormTests
{
[TestInitialize()]
public void MyTestInitialize()
{
GlobalVariable.App = ApplicationUnderTest.Launch(@"C:\RyansConjobulator.exe");
}
[TestMethod]
public void TextBoxValueToResultField()
{
Keyboard.SendKeys(TextBoxInput, "blah blah blah");
Mouse.Click(textButton.TextBoxButtonInput);
Assert.IsTrue(resultEdit.ResultEdit.DisplayText.Contains("blah blah blah"));
}
}
现在,我可以在整个测试过程中访问它并在最后清理它:
[TestCleanup()]
public void MyTestCleanup()
{
app.Close();
}
答案 1 :(得分:0)
执行此操作的方法是确保应用程序在实际开始测试运行之前运行。
这可以通过多种方式完成,但如果您在实验室环境中开展工作,请使用以下方法:
然后,您可以通过以下流程设置启动时的应用程序:
public static ApplicationUnderTest LaunchApplicationUnderTest(string applicationPath,
bool closeOnPlaybackCleanup)
{
Process[] processes = Process.GetProcessesByName("Notepad");
if (processes.Length > 0)
{
/// You can also launch app here using standard .net launching techniques
_application = ApplicationUnderTest.FromProcess(processes[0]);
}
else
{
_application = ApplicationUnderTest.Launch(applicationPath);
_application.CloseOnPlaybackCleanup = closeOnPlaybackCleanup;
}
return _application;
}
就个人而言,我只会排除脚本并启动我评论过的应用程序 - 稍微改变一下这个函数然后总是得到应用程序FromProcess。
逻辑是,如果应用程序已经打开,如果将CloseOnPlaybackCleanup设置为false,它将保持打开状态。
还要将应用程序作为全局静态测试。
答案 2 :(得分:0)