C# 模拟自动传真机';s";“解决”;TypeMock扩展方法

C# 模拟自动传真机';s";“解决”;TypeMock扩展方法,c#,visual-studio-2010,mocking,autofac,typemock,C#,Visual Studio 2010,Mocking,Autofac,Typemock,我试图模拟Autofac解析,例如 using System; using Autofac; using TypeMock.ArrangeActAssert; class Program { static void Main(string[] args) { var inst = Isolate.Fake.Instance<IContainer>(); Isolate.Fake.StaticMethods(typeof(Resolut

我试图模拟Autofac解析,例如

using System;
using Autofac;
using TypeMock.ArrangeActAssert;

class Program
{
    static void Main(string[] args)
    {
        var inst = Isolate.Fake.Instance<IContainer>();
        Isolate.Fake.StaticMethods(typeof(ResolutionExtensions), Members.ReturnNulls);
        Isolate.WhenCalled(() => inst.Resolve<IRubber>()).WillReturn(new BubbleGum());
        Console.Out.WriteLine(inst.Resolve<IRubber>());
    }
}

public interface IRubber
{}

public class BubbleGum : IRubber
{}
使用系统;
使用Autofac;
使用TypeMock.ArrangeActAssert;
班级计划
{
静态void Main(字符串[]参数)
{
var inst=Isolate.false.Instance();
孤立.false.StaticMethods(typeof(ResolutionExtensions),Members.ReturnNulls);
当调用(()=>inst.Resolve())时,隔离.WillReturn(new BubbleGum());
Console.Out.WriteLine(inst.Resolve());
}
}
公共接口路由器
{}
公共级泡泡糖:IRubber
{}
来自Moq,TypeMock的语法和异常让我非常困惑。最初在TestMethod中运行该方法后,我不断得到一个类似“WhenCall不能在没有补充行为的情况下运行”的异常。我试着为每个人和他们的母亲定义行为,但没有用

然后,我调试了测试运行,发现Autofac触发了一个实际的异常:IRubber尚未注册

所以很明显,静态解析函数没有被伪造,而且我不能让它被伪造,不管我如何连接它

Isolate.WhenCalled(() => ResolutionExtensions.Resolve<IRubber>(null)).WillReturn(new BubbleGum());
Isolate.WhenCalled(()=>ResolutionExtensions.Resolve(null)).WillReturn(new BubbleGum());

。。。从Autofac引发异常,抱怨IComponentContext不能为null。给它输入可能是伪造的IContainer(或者改为伪造IComponentContext)会让我回到“IRubber not registered”错误。

这可能是逆流而行的情况之一-创建“真实”容器所需的代码量,并注册相应的依赖项,与TypeMock的配置较少或类似。我建议走那条路


与目标组件完全依赖IContainer不同,您可以使用Func之类的“关系类型”,这类类型由Autofac隐式支持,除了易于模仿之外,还更具表现力。有关于这种方法的更多信息,正如。

如何模拟Owned虽然?通常可以将
Owned
视为一种基本类型,如
List
string
——在需要时使用其构造函数构造
Owned
的值,可能会为
T
实例传递一个模拟。希望这能有所帮助。对于所属类的生命周期参数,只传入IDisposable的模拟是否可以?什么才是真正应该被传递的参数?谢谢模仿是好的。在我创建的测试中,我经常使用
IDisposable
的存根实现来显示
IsDisposed
属性,然后测试可以检查以确保所拥有的实例被正确释放。