如何模拟一个方法?

发布于 2024-07-30 19:25:15 字数 516 浏览 4 评论 0原文

我只需要模拟 Method1 来测试我的流程异常。 我怎样才能做到这一点?

public interface IFoo
{
    void Method1();
    object Method2();
}
public class Foo : IFoo
{
    public void Method1()
    {
        // Do something
    }

    public object Method2()
    {
        try
        {
            // Do something
            Method1();
            // Do somenthing

            return new object();
        }
        catch (Exception ex)
        {
            // Process ex
            return null;
        }
    }
}

I need to mock just Method1 to test my process exception. How I can do that?

public interface IFoo
{
    void Method1();
    object Method2();
}
public class Foo : IFoo
{
    public void Method1()
    {
        // Do something
    }

    public object Method2()
    {
        try
        {
            // Do something
            Method1();
            // Do somenthing

            return new object();
        }
        catch (Exception ex)
        {
            // Process ex
            return null;
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别靠近我心 2024-08-06 19:25:16

该界面是一个红鲱鱼。 您必须模拟实现 Foo 并将 Method1 更改为虚拟:

...
public virtual void Method1()
...

使用 throw 扩展创建您希望处理的异常:

var fooMock = MockRepository.GenerateStub<Foo>();
fooMock.Expect(foo => foo.Method1()).Throw(new Exception());

var actual = fooMock.Method2();
Assert.IsNull(actual);

fooMock.VerifyAllExpectations();

The interface is a red herring. You'll have to mock the implementation Foo and change Method1 to be virtual:

...
public virtual void Method1()
...

Use the throw extension to create the exception you wish to handle:

var fooMock = MockRepository.GenerateStub<Foo>();
fooMock.Expect(foo => foo.Method1()).Throw(new Exception());

var actual = fooMock.Method2();
Assert.IsNull(actual);

fooMock.VerifyAllExpectations();
木緿 2024-08-06 19:25:16
fooMock =  MockRepository.GenerateStub<IFoo>();
fooMock.Stub(x => x.Method1()).Return("Whatever");
fooMock =  MockRepository.GenerateStub<IFoo>();
fooMock.Stub(x => x.Method1()).Return("Whatever");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文