基本上,我的一些测试通过了,而另一些测试失败了。根据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())失败了,并出现以下错误: {"Method 'ClassLibrary.Manager.SampleMethod' not found."}
令人困惑的是,这个错误一直存在,但实际测试几乎相同。这毫无意义。我在VS2012 RC和VS2010上尝试过,结果相同。
我唯一能想到的是,“0”被转换为除int以外的其他类型,这意味着它找不到SampleMethod方法的签名?我尝试了第三个测试,明确传递了我要查找的类型(TestAlsoErrorsOut()),但结果也与相同的错误失败了。
有什么想法吗?谢谢。
添加编辑
使用Ian的建议,改用obj[]而不是params obj[]重载,它可以工作(测试TestWorksAsWell())。这解释了为令TestAlsoErrorsOut()失败,因为我使用的是params方法,它不能与Type[]一起使用。所以,这个问题已经解决了。但是,为什么?为什么params obj[]传递1时可以工作,但传递0时却不行?