c# – 运行到System.MissingMethodException:使用PrivateObject找不到方法

c# – 运行到System.MissingMethodException:使用PrivateObject找不到方法,第1张

概述基本上,我的一些测试是成功的,有些是失败的.根据Skeet先生的出色建议,我创建了一个完整的代码示例,以确认我并不疯狂.这是代码: namespace ClassLibrary{ using System; public class Manager { private int SampleMethod(int id) { 基本上,我的一些测试是成功的,有些是失败的.根据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:使用PrivateObject找不到方法全部内容,希望文章能够帮你解决c# – 运行到System.MissingMethodException:使用PrivateObject找不到方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存