首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSTEST PrincipalPermission

MSTEST PrincipalPermission
EN

Stack Overflow用户
提问于 2009-07-09 20:03:31
回答 2查看 3.9K关注 0票数 20

如何对使用PrincipalPermission属性修饰的代码进行单元测试?

例如,这是可行的:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        var c = new MyClass();
    }
}

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Users")]
class MyClass
{
    public MyClass()
    {
        Console.WriteLine("This works.");
    }
}

这将抛出一个SecurityException:

代码语言:javascript
复制
[TestClass]
public class UnitTest1
{
    [TestInitialize]
    public void TestInitialize()
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    }

    [TestMethod]
    public void TestMethod1() 
    { 
        var c = new MyClass();
    }
}

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-10 12:21:25

在您的测试中创建一个GenericIdentity并将其附加到Thread.CurrentPrincipal中怎么样:

代码语言:javascript
复制
[TestMethod]
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester");
    var roles = new[] { @"BUILTIN\Users" };
    var principal = new GenericPrincipal(identity, roles);
    Thread.CurrentPrincipal = principal;

    var c = new MyClass();
}

对于失败的测试,您可以:

代码语言:javascript
复制
[TestMethod]
[ExpectedException(typeof(SecurityException))] // Or whatever it's called in MsTest
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester");
    var roles = new[] { @"BUILTIN\NotUsers" };
    var principal = new GenericPrincipal(identity, roles);
    Thread.CurrentPrincipal = principal;

    var c = new MyClass();
}
票数 21
EN

Stack Overflow用户

发布于 2009-07-09 20:17:18

您可以尝试在测试方法中impersonating不同的用户,如果您以管理员身份运行代码,您可以在测试(或测试类)中创建一个本地用户帐户,并在最后删除它。

编辑:抱歉,我想象过使用impersonate来测试失败案例-我应该正确地阅读您的问题:)我有类似的单元测试,并且他们能够在mstest中创建本地帐户。这是否是好的做法则是另一回事。

我看到你已经按照this页面建议的那样做了:将应用程序域的主要策略设置为"WindowsPrincipal“。对我来说,Thread.CurrentPrincipal.Identity.Name提供了我的用户名,并通过了VS2005和VS2008的测试,目标是.NET 2.0,3.0和3.5。

您是否在Vista/Win7上运行UAC和非提升的VS?否则,您是否能够使用不同的组在另一台计算机上进行复制,或者在您的计算机上创建另一个本地管理员帐户并以此用户身份运行测试?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1106163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档