我试图访问内部静态类来覆盖它的一些方法,以便我可以测试依赖于该类的类
从我读到的应该是可能的,但我显然不理解一切,因为即使是一个简单的例子似乎也无法为内部静态类生成一个mole类型。
我在命名空间和程序集中有两个类
namespace SimpleClassToTest
{
public class Class1
{
public string SayOla() { return Class2.ReturnMe("Ola"); }
}
}
namespace SimpleClassToTest
{
internal static class Class2
{
static public string ReturnMe(string m)
{
return m;
}
}
}
在AssemblyInfo.cs中我也有
[assembly: InternalsVisibleTo("SimpleClassToTest")]
[assembly: InternalsVisibleTo("SimpleClassToTest.Moles")]
在测试项目中,我有一个测试类
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SimpleClassToTest;
using SimpleClassToTest.Moles;
namespace SimpleClassToTest.Moles
{
[TestClass]
public class UnitTest1
{
public UnitTest1()
{
}
[TestMethod]
[HostType("Moles")]
public void TestMethod1()
{
Class1 c1 = new Class1();
Assert.AreEqual(c1.SayOla(), "Ola");
MClass2.ReturnMeString = (ignored) => { return "ReturnMe"; };
Assert.AreEqual(c1.SayOla(), "ReturnMe");
}
}
}
不幸的是,这不是编译。错误是
UnitTest1.cs(25,13):错误CS0122:'SimpleClassToTest.Moles.MClass2'由于其保护级别而无法访问
任何提示这一点的提示肯定会受到赞赏!
谢谢!
彼得
PS在VS2008和VS2010上尝试使用摩尔版本Microsoft Moles v0.94.51023.0
(编辑:来自下面的评论)
作为一种解决方法,在单元测试中:
Type mClass2Type = typeof(SimpleClassToTest.Moles.MClass1)
.Assembly.GetType("SimpleClassToTest.Moles.MClass2");
PropertyInfo returnMeProp = mClass2Type.GetProperty("ReturnMeString");
Microsoft.Moles.Framework.MolesDelegates.Func<String, String> molesDelegate =
(ignore) => { return "ReturnMe"; };
returnMeProp.SetValue(mClass2Type, molesDelegate, null);
Assert.AreEqual(c1.SayOla(), "ReturnMe");
答案 0 :(得分:0)
如果您的受测试组件是强签名的,那么鼹鼠组件也是强签名的,您必须在InternalsVisibleTo
属性中指定公钥。有关详细信息,请参阅“鼹鼠参考手册”的“代码生成和编译”部分。
以下是可能相关的引用:
...将此代码段用作 起点将 InternalsVisibleTo 属性添加到项目中。
[组件:InternalsVisibleTo(“FileSystem.Moles,公钥= 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc”)]