我很感激为Moles方法提供正确的参数类型提供了一些帮助。目的是骚扰一个公共实例。我不是技术人员。
这是我的尝试。 (注释显示了来自对象浏览器的“SetMolePublicInstance()”的定义:
[ __DoNotInstrument]
public static class Deq
{
public static void Replace<T>(
//SetMolePublicInstance( System.Delegate _stub, System.Type receiverType, _
// object _receiver, string name, params System.Type[] parameterTypes)
Func <T> stub, // need help for the correct parameter types
Func <Object > receiverType,
Func <T> objectReceiver,
string methodName,
Func <T> parameterTypes)
{
//SetMolePublicInstance( System.Delegate _stub, System.Type receiverType, _
// object _receiver, string name, params System.Type[] parameterTypes)
MoleRuntime .SetMolePublicInstance(stub, receiverType, objectReceiver, methodName, parameterTypes;
// the previous line produces the error: "The best overloaded method match for ... has some invalid arguments"
}
}
这是我目前的测试代码。在找到上面的Replace()方法中的各种参数类型之前,我无法完成此代码:
[ Test]
public void StaticMethodUnitTestWithDeq()
{
using (MolesContext .Create())
{
Class1 objectReceiver = new Class1();
Deq .Replace(
() => "New value" , // stub
() => Class1 , // receiverType
() => objectReceiver, // objectReceiver
() => "TestString" , // methodName
() => null ); // parameterTypes
//Assert.AreEqual(new DateTime(2000, 1, 1), Class1.DateTime.Now);
}
}
以下是Class1的代码:
public class Class1
{
public string TestString() { return "Original value" ; }
}
编辑:
通过使用“null”的各种组合,我发现接受以下声明:
MoleRuntime.SetMolePublicInstance(stub, null, objectReceiver, methodName, null);
因此,这意味着不正确的类型用于第二个参数“receiverType”和最后一个参数“parameterTypes”。