MSTEST PrincipalPermission
.net, c#, mstest, security, unit-testing
Solution
How about creating a `GenericIdentity` and attaching that to the `Thread.CurrentPrincipal` in your test like so:
[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();
}
For a fail test, you could:
[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();
}
Problem
How do you unit test code decorated with the PrincipalPermission attribute? For example, this works: ``` 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."); } } ``` This throws a SecurityException: ``` [TestClass] public class UnitTest1 { [TestInitialize] public void TestInitialize() { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); } [TestMethod] public void TestMethod1() { var c = new MyClass(); } } ``` Any ideas?