我的情况
我在 ASP.NET MVC4 应用程序中进行测试。我正在开发的应用程序部分将现代 WebSecurity/SimpleMembershipProvider 与正在逐步淘汰的遗留身份验证系统相结合。我很乐意对此进行适当的单元测试,但出于实际原因,我选择不模拟或排除 WebSecurity;我只是将它指向一个测试数据库。*
问题:
WebSecurity.InitializeDatabaseConnection()
使用 NUnit,我想使用该方法为一系列测试设置 WebSecurity 。此方法设计为仅运行一次,最好在应用程序启动时运行。
我想隔离我的测试,擦除数据库并InitializeDatabaseConnection
在每次测试之前调用(即在[Setup]
方法中)。但是,WebSecurity 静态维护其 Initialized 状态,这意味着如果它在同一个应用程序实例中运行多次,则会引发异常。
换句话说,只有我的第一个测试有效;随后的抛出异常:
System.InvalidOperationException : The "WebSecurity.InitializeDatabaseConnection" method can be called only once.
问题:
有什么方法可以“取消初始化”WebSecurity,以便我可以在单个应用程序实例中多次初始化它?或者,有没有办法表明 NUnit 应该在某个夹具中的每次测试之前重新启动应用程序?
笔记:
我试过只在方法或 a中调用WebSecurity.InitializeDatabaseConnection()
一次,然后在测试之间擦除相关表,但我真的更希望有一个有保证的干净状态。此外,这种方法有一个不幸的副作用:如果我想使用 NUnit GUI 依次运行一些测试,然后再依次运行一些测试,我必须在序列之间重新加载程序集。GUI 在每个测试序列中运行一次这些设置方法,但显然会维护相同的应用程序实例,直到重新加载程序集。[TestFixtureSetup]
[SetUpFixture]
* 毕竟我决定模拟 WebSecurity;请参阅下面的我的自我回答。