我正在尝试在模拟对象上测试私有方法。请冷静下来,我知道你要把你的干草叉拿出来。
我很清楚要说的一切都可以通过对我大喊 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
我正在尝试做的事情,尽管它很疯狂,可能吗?或者这对于单元测试来说是否过于狂妄?