MSpec: прохождение моей первой спецификации

Я только начинаю работать с MSpec, и я никак не могу пройти свою первую спецификацию. Хотя проверка исходного кода идеальна, я не хочу тратить на это целую вечность прямо сейчас.

Проблема в том, что Потому что вызывает исключение нулевой ссылки - репозиторий нулевой.

Точка останова в Install срабатывает (но не тогда, когда я помещаю ее в базовый класс), но я предполагаю, что код внутри не запускается, вызывая мою ошибку.

Любая помощь будет отличной - объяснения и ссылки также очень ценятся.

[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;
}

person nick    schedule 09.01.2011    source источник


Ответы (1)


Ваш код выглядит хорошо, хотя в It, похоже, отсутствует лямбда-оператор и скобки в 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;
    }
}
person Alexander Groß    schedule 09.01.2011
comment
Спасибо, это действительно была лямбда на It. Ненавижу, когда ответ так очевиден. Тем более что я пытался сравнивать с чужим кодом. в любом случае - вы исправили - я счастлив. - person nick; 09.01.2011