0

将 Machine.Fakes 从 1.0.1 更新到 1.7 版后,我收到“WithFakes 尚未初始化。您是从静态初始化程序调用它吗?” 错误/异常。

我正在像这样构建我的测试:

[TestFixture]
public class MailSenderTests : WithSubject<MailSender>
{
    [TestFixture]
    public class TheSendMethod : AssertionHelper
    {
        [Test]
        public void Test_that_exception_is_thrown_if_no_recievers()
        {
            Expect(() => Subject.Send(string.Empty, string.Empty, recievers: null), Throws.InstanceOf<ArgumentException>());
        }
    }
}

我在 SUT 中测试的每种方法都有一个类。

有人可以告诉我我做错了什么吗?

4

2 回答 2

0

好吧,我想自 1.0.1 版以来发生了很多变化。使用 1.7.0 版本,您的测试应如下所示

public class Given_a_MailSender : WithSubject<MailSender>
{
    static Exception Exception;

    Because of = () =>
    {
        Exception = Catch.Exception(() => Subject.Send(string.Empty, string.Empty, receivers: null));
    };

    It should_throw_an_exception = () => Exception.ShouldBeOfType<ArgumentException>();
}
于 2013-09-05T15:45:31.583 回答
0

您没有按照预期的方式使用 Machine.Fakes。它是Machine.Specifications的扩展,没有它就没有意义。您在代码示例中使用了其他一些测试框架。这种不兼容性与版本无关 - 除了已引入的显式错误消息。

要扩展 shamp00 的答案:

using System;
using Machine.Fakes;
using Machine.Specifications;

namespace SOAnswers
{
    [Subject(typeof(MailSender), "Sending an Email")]
    public class When_no_receivers_are_specified : WithSubject<MailSender>
    {
        static Exception exception;

        Because of = () =>
            exception = Catch.Exception(() => Subject.Send(string.Empty, string.Empty, receivers: null));

        It should_throw_an_exception = () =>
            exception.ShouldBeOfType<ArgumentException>();
    }
}

我认为这是非常有表现力的。:-) 但是,如果您不想使用 Machine.Specifications,我想您应该寻找更适合的自动模拟框架。

于 2013-09-06T17:02:25.640 回答