C#
namespace MyTestProject
{
[TestClass]
public class MyTesterClass
{
[TestMethod]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("$(SolutionDir)\\MyWebProject", "/MyWebProject")]
[UrlToTest("http://localhost:29633/")] // FIXUP for your port
public void MyTestMethod()
{
Console.Out.WriteLine("BEFORE");
Assert.IsTrue(System.Diagnostics.Debugger.IsAttached); // always fails
System.Diagnostics.Debugger.Break();
Console.Out.WriteLine("AFTER");
}
}
`
IDE:VS2015更新1(在Win10上),没有安装额外的第三方插件
目标:.net 4.5
使用IISExpress作为非管理员用户进行测试(即使在64位系统上也是32位)
在IISExpress中设置2个绑定" localhost:29633"和一个IP" 192.168.0.2:29633"允许跨网络测试和使用。这一切都很好。这是在.vs \ config \ applicationhost.config中设置的,具有2个eninres bindingInformation =":29633:*"和bindingInformation =":29633:192.168.0.2"
我可以让我的单元测试成功通过,但我无法在任何设置的断点处停止执行,无论是在代码Break()还是IDE断点窗口。
因此,我提供了一个目标测试类,以便在IDE中工作,以证明它应该按原样适用于其他人。 您需要创建一个虚拟/空的ASP.NET项目,名为" MyWebProject"并将此测试用例放在自己的项目中。
我尝试过的事情:
如果我尝试附加到进程(在测试之间在后台运行的现有IISExpress.exe),那么我根本无法启动我的测试,选项"运行/调试所有测试"灰了。 如果我尝试启动任何其他应用程序,比如自己运行ASP.NET webapp,我再次无法启动测试,选项显示为灰色。 所以它必须从"测试[菜单] - >开始工作。调试 - >所有测试"并让VS2015根据需要启动所有进程,并附带调试器(理想情况下是IISExpress.exe和TE.processhost.managed.exe)。
我觉得痛苦的是,如果在设置过程中出现问题,为什么单元测试失败的原因是VS2015无法附加到进程,然后确认正确的进程设置,因此它正在执行预期的副本项目等等。它应该始终在启动时暂停执行以允许VS设置并与作为调试器的劣质进程通信,然后执行恢复。它应该只是单元测试运行失败,如果没有按预期设置环境,甚至不开始测试。
我注意到看起来像2 te.processhost.managed.exe(一个在测试中持久存在,一个在当前测试运行期间产生)。断点对话框指示此进程是测试用例断点的位置(但不是ASP.NET断点)
但当然ASP.NET运行在iisexpress.exe中,这是另一个过程。
调试器附加到两个好吗?我应该如何看待这种情况呢?如何在终止时停止调试器清理,因为这会将UI重置为Debug中的许多选项 - >窗口 - > ...不可用(如果你不够快)。
如果我在代码中设置一个ASP.NET断点,例如在Global.asax / aspx中的Application_BeginRequest()中,执行也不会在这里停止。
我正在使用一个工作项目ZIP文件和最简单的测试用例项目的设置,证明调试器是从VS连接的,所以我可以通过代码运行步骤。