Team System Test是否支持在特定标识下运行测试?

时间:2009-11-24 18:53:12

标签: unit-testing security testing

是否可以在Team System Test中配置单元测试以在特定标识下运行(类似于runas)?

2 个答案:

答案 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);
}