Вы можете изменить ShouldSendLogic()
для получения статуса как параметра bool ShouldSendLogic(bool status)
. Таким образом, ShouldSendLogic
может быть проверен на наличие положительных и отрицательных случаев.
Еще один подход состоит в том, чтобы иметь часть интерфейса и вводить зависимость класса, который имеет ShouldSendLogic()
. Результат IsSuccess()
может быть изменен с помощью классов макета в единичной тестовой среде, а ShouldSendLogic()
может быть протестирован на разные значения статуса.
class MyClass
{
ISomeInterface _interfaceObj;
public MyClass(ISomeInterface interfaceObj)
{
_interfaceObj = interfaceObj;
}
public bool ShouldSendLogic()
{
var status = _interfaceObj.IsSuccess();
if (status)
{
SendInvoice();
// do some operation
}
return status;
}
}
Редактировать
Разделяя код, который проверяет на успех на интерфейс, теперь вы можете создать «ложный» объект в модульных тестах, где вы можете решить, что значение IsSuccess () должно быть.
например.
public class MockSuccessClass : ISomeInterface
{
public bool IsSuccess { return true; }
}
И тогда в вашем разделе «Arrange» вашего модульного тестирования, вы можете создать экземпляр MockSuccessClass и передать его в SUT.
Вам не нужно использовать Moq, но это сэкономит ваше время, если вы разрешите Moq создавать свои классы Mock для вас.
делает 'SendInvoice' причиной какого-либо побочного эффекта, который вы можете измерить? –
@SamIam: Да, эта логика не должна выполняться, когда состояние ложно в соответствии с приведенной выше логикой – Learner
, но вызывает ли это какие-либо побочные эффекты? Что оно делает? –