gpt4 book ai didi

c# - 遇到 System.MissingMethodException : Method Not Found with PrivateObject

转载 作者:太空狗 更新时间:2023-10-29 18:20:30 26 4
gpt4 key购买 nike

基本上,我的一些测试成功了,一些失败了。根据 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com