所有测试私有方法的方法似乎都失败了(c#)
本文关键字:失败 测试 有方法 方法 | 更新日期: 2023-09-27 18:15:58
我想用几个非常基本的私有(非静态)方法测试这个类,但是…我似乎不能使它工作。
下面的代码一直给我以下异常:
系统。MissingMethodException:方法GeneratorStandard。GetNumber'未找到。
测试如下:
[TestMethod]
public void GetNumber01()
{
var list = GetList();
var generator = new GeneratorStandard();
var privateObject = new PrivateObject(generator, new PrivateType(typeof(Generator)));
int result = (int)privateObject.Invoke("GetNumber", list);
Assert.AreEqual(2, result);
}
Generator是包含该方法的抽象基类,而GeneratorStandard是继承Generator的实现类。
我也试过在VS2010中使用"创建私有访问器"按钮,但是它只创建一个测试引用文件,而不是一个实际的影子类…所以这行不通。
请帮忙:)
如果来自抽象"基"类的方法必须通过继承自抽象类的类型来访问,那么它们应该(至少)标记为protected
,而不是private
。
public abstract class MyClassBase {
private void DoThis(){}
protected void DoThat(){}
}
public class MyImplemntation : MyClassBase {
//I don't know DoThis();
//I know DoThat();
}
要通过反射调用私有方法,您需要指定几个BindingFlags:
var instance = new Foo();
var type = instance.GetType();
var meth = type.GetMethod("PrivateMeth", BindingFlags.NonPublic | BindingFlags.Instance);
if(meth != null)
meth.Invoke(instance, new object[0] { });
BindingFlags.NonPublic
定义成员不是public。
BindingFlags.Instance
定义成员不是静态的
看,我不是很确定,如果你试图调用一个私有成员和单元测试,但请记住,这是错误的方法。
你应该测试你的公共方法,观察反应、沟通和行为。私有方法只是一个实现细节。
嗯,你可以使用动态和反射的c-c-c-combo断路器(如果这是。net 4或更好)来测试你的私有方法。我有一段时间没玩这个游戏了,但这应该能让你至少达到80%或者更好。
用c# 4测试私有方法
这可能会让你剩下的路就像那里一样。
使用c#动态类型方便地访问对象内部。
你看过这篇文章了吗?
http://www.codeproject.com/Articles/9715/How-to-Test-Private-and-Protected-methods-in-NET在你的代码中,我说你必须首先通过privateObject.GetType(). getmethod("GetNumber",标志)获得方法,然后调用它。