Обход утилизировать для тестирования - PullRequest
1 голос
/ 22 апреля 2009

Я пытаюсь проверить метод. Я хочу утверждать, что в этом методе есть вызов метода (вызывающий сервис) код выглядит так:

using(proxy = new Proxy())
{ 
      proxy.CallService();
}

Я меняю прокси с поддельным объектом (используя TypeMock) но получить ошибку из-за поддельного объекта, расположенного в конце блока. Я не хочу удалять этот блок "с помощью". Спасибо

Ответы [ 4 ]

1 голос
/ 22 апреля 2009

Сделайте так, чтобы фиктивный объект тоже был утилизирован. (Я не знаю TypeMock, но в некоторых других фальшивых фреймворках это был бы просто случай вызова Dispose во время фазы «записи».) На самом деле, я бы сказал, что без этого теста все равно не так потому что, вероятно, вы хотите быть уверены, что прокси является утилизируемым.

0 голосов
/ 24 апреля 2009

Отказ от ответственности: я работаю в Typemock
Если вы используете Arrange Act Assert API, вы можете использовать Members.ReturnRecursiveFakes когда вы создаете ваш поддельный объект (Примечание: по умолчанию это версия 5.2.0) Это автоматически подделает метод Dispose.

так что ваш тест будет примерно таким:

var fake = Isolate.Fake.Instance<Proxy>(Members.ReturnRecursiveFakes);
Isolate.WhenCalled(() => fake.CallService()).IgnoreCall();
Isolate.Swap.NextInstance<Proxy>().With(fake);

UnderTest classUnderTest = new ClassUnderTest();
classUnderTest.MethodUnderTest(); // assuming the Proxy instance is used here.

Isolate.Verify.WasCalledWithAnyArguments(()=>fake.CallService());

Я хочу добавить к тому, что сказал Джон Скит, что я создам отдельный тест, который обеспечит вызов метода Dispose.
Я считаю хорошей практикой утверждать одну вещь в каждом методе теста, поэтому, когда тест заканчивается, вы сразу же узнаете причину.

0 голосов
/ 22 апреля 2009

Сделать поддельный объект реализующим IDisposable:

class FakeObject : IDisposable
{
    public void Dispose() {}
}
0 голосов
/ 22 апреля 2009

Просто проинструктируйте ваш макет Прокси, чтобы ожидать звонка на Dispose(). Если вы используете отражающие насмешки, вам нужно сделать что-то вроде этого

var proxyMock = MockManager.Mock(typeof(Proxy));
// set up regular calls to proxy, e.g.
proxyMock.ExpectCall("CallService");
proxyMock.ExpectCall("Dispose");

для естественных издевательств сделайте вызов Dispose() в вашем блоке использования.

...