是否可以在Team System Test中配置单元测试以在特定标识下运行(类似于runas)?
答案 0 :(得分:0)
虽然我不知道它(我认为不是),但你应该认真考虑是否可以推广你的代码以对抗IPrincipal接口,而不是依赖于当前的WindowsIdentity。
这使得您的代码更加灵活,并且使单元测试变得更加简单,因为您可以将任何IPrincipal实现(例如GenericPrincipal)分配给Thread.CurrentPrincipal。请记住在每个测试用例后进行适当的Fixture Teardown。以下是我们其中一个测试套件的典型示例:
[TestClass]
public class AuditServiceTest
{
private IPrincipal originalPrincipal;
public AuditServiceTest()
{
this.originalPrincipal = Thread.CurrentPrincipal;
}
[TestCleanup]
public void TeardownFixture()
{
Thread.CurrentPrincipal = this.originalPrincipal;
}
[TestMethod]
public void SomeTest()
{
Thread.CurrentPrincipal =
new GenericPrincipal(
new GenericIdentity("Jane Doe", null));
// More test code
}
}
尽管如此,有些情况下可能需要冒充“单位”测试。我在MSTest中看到这种方式的方法是在测试用例中编写explict模拟代码。
答案 1 :(得分:0)
看起来Team Test没有这种能力。我最终对单元测试进行了编码,以模拟用户using this包装器来调用LogonUser Win32 API。
现在我的单元测试是这样的:
[TestMethod]
public void Assert_Access_Denied()
{
bool denied = false;
using (new Impersonator("SomeValidUserWithNoAccess", "SomeTestDomain", "SomeTestPassword"))
{
try
{
// access some method that performs windows auth
}
catch (UnauthorizedAccessException exc)
{
denied = true;
}
}
Assert.IsTrue(denied);
}