我有以下设置。具有 3 个项目的解决方案。
项目 A,命名空间 A,A 类
项目 B,命名空间 B,B 类:A
和一个用于 B 上的单元测试的测试项目。要访问 B 的私有功能,我使用Create Private Accessor -> Test在我的测试项目中创建一个访问器。
似乎 A 在另一个程序集中 VS 没有为 A 创建访问器函数。
我有以下设置。具有 3 个项目的解决方案。
项目 A,命名空间 A,A 类
项目 B,命名空间 B,B 类:A
和一个用于 B 上的单元测试的测试项目。要访问 B 的私有功能,我使用Create Private Accessor -> Test在我的测试项目中创建一个访问器。
似乎 A 在另一个程序集中 VS 没有为 A 创建访问器函数。
您需要使用多个访问器。考虑一下:
// Assembly A
public class ClassA
{
protected int someInt = 1;
private void DoSthmWithA()
{
someInt = 10;
}
}
// Assembly B
public class ClassB : ClassA
{
private void DoSthmWithB()
{
someInt = 11;
}
}
[TestMethod()]
public void Testing
{
var target = new ClassB();
var poA = new PrivateObject(target, new PrivateType(typeof (ClassA)));
var poB = new PrivateObject(target);
var accA = new ClassA_Accessor(poA);
var accB = new ClassB_Accessor(poB);
accA.DoSthmWithA();
Assert.AreEqual(accA.someInt, 10);
accB.DoSthmWithB();
Assert.AreEqual(accA.someInt, 11);
}
或者
[TestMethod()]
public void Testing
{
var target = new ClassB();
var poA = new PrivateObject(target, new PrivateType(typeof(ClassA)));
var poB = new PrivateObject(target);
poA.Invoke("DoSthmWithA");
var accA = new ClassA_Accessor(poA);
Assert.AreEqual(accA.someInt, 10);
poB.Invoke("DoSthmWithB");
Assert.AreEqual(accA.someInt, 11);
}