- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基本上,我的一些测试成功了,一些失败了。根据 Skeet 先生的出色建议,我创建了一个完整的代码示例以确认我没有疯。这是代码:
namespace ClassLibrary
{
using System;
public class Manager
{
private int SampleMethod(int id)
{
return id;
}
}
}
我的测试是:
namespace UnitTestProject
{
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest
{
[TestMethod]
public void TestPasses()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 1);
}
[TestMethod]
public void TestErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 0);
}
[TestMethod]
public void TestWorksAsWell()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
privateInfo.Invoke("SampleMethod", new object[] { 0 });
}
[TestMethod]
public void TestAlsoErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var types = new Type[] { typeof(int) };
var actual = privateInfo.Invoke("SampleMethod", types, 0);
}
}
}
第一个测试 (TestPasses()) 有效。
第二个测试 (TestErrorsOut()) 失败并出现以下错误:{“未找到方法‘ClassLibrary.Manager.SampleMethod’。”}
莫名其妙的是错误是一致的,而实际测试却几乎一模一样。这没有道理。我在 VS2012 RC 和 VS2010 上试过这个,结果相同。
我唯一能想到的是“0”被转换为int以外的东西,这意味着它找不到SampleMethod的方法签名?我尝试了第三次测试以显式传递我正在寻找的类型 (TestAlsoErrorsOut()),但同样的错误也会出错。
想法?谢谢。
编辑添加
通过使用 Ian 关于使用 obj[] 而不是 params obj[] 重载的建议,它起作用了(测试 TestWorksAsWell())。这解释了为什么 TestAlsoErrorsOut() 失败,因为我使用的是 params 方法,它不适用于 Type[]。所以,这是固定的。但为什么?为什么 params obj[] 在传递 1 而不是 0 时起作用?
最佳答案
根据文档 ( http://msdn.microsoft.com/en-us/library/ms243710.aspx ),参数应该作为对象数组传递。显式传递对象数组似乎可以正常工作:
var actual = (int)privateInfo.Invoke("SampleMethod", new object[] {0});
单独传递 0 似乎会导致编译器选择此重载
Invoke(string name = "SampleMethod", System.Reflection.BindingFlags bindingFlags = Default, object[] args = {object[0]})
关于c# - 遇到 System.MissingMethodException : Method Not Found with PrivateObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11640793/
我是一名优秀的程序员,十分优秀!