1

刚开始使用 MSpec,我似乎无法让我的第一个规范通过。虽然检查源代码是理想的,但我现在真的不想花很多时间去做这件事。

问题是因为导致空引用异常 - 存储库为空。

建立上的断点被击中(但不是当我把它放在基类中时),但我猜里面的代码没有运行导致我的错误。

任何帮助都会很棒 - 解释和链接也非常感谢。

[Subject("Sandwich Repository CRUD")]
public class sandwich_repository_can_save_sandwiches : SandwichRepositoryContext
{
    Establish context = () =>
    {
        sandwich = new Sandwich(ValidSandwichName);
        repository = new SandwichRepository();
    };

    Because of = () => { repository.Save(sandwich); };

    It should_contain_the_created_sandwich = repository.GetSandwichByName(ValidSandwichName).ShouldNotBeNull;
}

public abstract class SandwichRepositoryContext
{
    protected static Sandwich sandwich;
    protected const string ValidSandwichName = "Olive Le Fabulos";
    protected static SandwichRepository repository;
}
4

1 回答 1

1

您的代码看起来不错,尽管It似乎错过了 lambda 运算符和ShouldNotBeNull. 这对你有用吗?

[Subject("Sandwich Repository CRUD")]
public class when_a_sandwich_is_created : SandwichRepositoryContext
{
    Establish context = () =>
    {
        sandwich = new Sandwich(ValidSandwichName);
        repository = new SandwichRepository();
    };

    Because of = () => { repository.Save(sandwich); };

    It should_find_the_created_sandwich =
        () => repository.GetSandwichByName(ValidSandwichName).ShouldNotBeNull();
}

public abstract class SandwichRepositoryContext
{
    protected static Sandwich sandwich;
    protected const string ValidSandwichName = "Olive Le Fabulos";
    protected static SandwichRepository repository;
}

这是我用来验证上述上下文是否通过的基础设施代码:

public class SandwichRepository
{
    Sandwich _saved;

    public void Save(Sandwich sandwich)
    {
        _saved = sandwich;
    }

    public Sandwich GetSandwichByName(string validSandwichName)
    {
        if (_saved.ValidSandwichName == validSandwichName)
            return _saved;

        return null;
    }
}

public class Sandwich
{
    public string ValidSandwichName
    {
        get;
        set;
    }

    public Sandwich(string validSandwichName)
    {
        ValidSandwichName = validSandwichName;
    }
}
于 2011-01-09T17:27:18.920 回答