【发布时间】:2014-01-24 11:50:18
【问题描述】:
我正在尝试在模拟对象上测试私有方法。请冷静下来,我知道你要把你的干草叉拿出来。
我很清楚要说的一切都可以通过对我大喊 REFACTOR 来回答。我只需要一个直接的答案。有人看着我的眼睛告诉我这是不可能的。这是一个无法通过谷歌搜索的问题,所以我只需要听到它。
这就是我正在处理的问题。
public class SecretManager
{
protected virtual string AwfulString { get { return "AWFUL, AWFUL THING"; }
public SecretManager()
{
//do something awful that should be done using injection
}
private string RevealSecretMessage()
{
return "don't forget to drink your ovaltine";
}
}
我正在尝试测试它。
var mgr = new Mock<SecretManager>();
mgr.Protected().SetupGet<string>("AwfulThing").Returns("");
var privateObj = new PrivateObject(mgr.Object);
string secretmsg = privateObj.Invoke("RevealSecretMessage");
Assert.IsTrue(secretmsg.Contains("ovaltine"));
还有例外:
System.MissingMethodException: Method 'Castle.Proxies.SecretManagerProxy.RevealSecretMessage' not found
我正在尝试做的事,虽然很疯狂,可能吗?或者这只是单元测试无法承受的狂妄自大?
【问题讨论】:
标签: c# moq vs-unit-testing-framework privateobject.invoke