Различия между реализациями тестовых шпионов - PullRequest
0 голосов
/ 03 января 2011

У меня возникли проблемы с определением, какой тип теста удваивает эти два класса. Они оба содержат (базовое) поведение.

Их отличие в том, что первый в реальном контексте не будет работать, а второй будет работать (это будет класс, который ничего не делает, но он будет работать! Второй будет зависать).

Они оба кажутся мне Тестовыми шпионами . Они оба предоставляют способ узнать, был ли вызван метод Run() или нет. (это причина существования этих классов!).

Я не могу использовать второй, как он есть во всех контекстах, так как я не могу также использовать только первый во всех контекстах.

Я мог бы реорганизовать их обоих в один, но, возможно, это могло бы стать менее понятным при чтении кода.

class FilterTestSpy : IFilter {
    private bool hasBeenRan = false;

    ...

    public bool HasBeenRan { get { return hasBeenRan; } }

    public void Run() {
        hasBeenRan = true;
    }
}

class FilterTestSpy2: IFilter {
    private bool hasBeenRan = false;

    ...

    public bool HasBeenRan { get { return hasBeenRan; } }

    public void Run() {
        ...some logic...
        hasBeenRan = true;
    }
}

Я знаю, что есть насмешливые рамки, блаблабла, это не то, о чем я здесь спрашиваю.

Спасибо!

1 Ответ

1 голос
/ 03 января 2011

Не могли бы вы создать стратегию для делегирования в методе Run()?Таким образом, вы сможете иметь только один класс шпиона с единственной ответственностью, то есть сообщить, был ли вызван метод.Таким образом, для разных контекстов вы можете вводить разные стратегии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...