У меня есть служба приложений (т. Е. Большой метод), отвечающая за координацию взаимодействия между несколькими бизнес-объектами.По сути, он берет DTO из одной системы, которая содержит информацию о клиенте и счет-фактуру, и переводит ее и импортирует в другую систему на основе различных бизнес-правил.
public void ProcessQueuedData()
{
var queuedItems = _importServiceDAL.LoadQueuedData();
foreach (var queuedItem in queuedItems)
{
var itemType = GetQueuedImportItemType(queuedItem);
if (itemType == QueuedImportItemType.Invoice)
{
var account = _accountDAL.GetAccountByAssocNo(queuedItem.Assoc);
int agentAccountID;
if (!account.IsValid)
{
agentAccountId = _accountDAL.AddAccount(queuedItem.Assoc);
}
else
{
agentAccountId = account.AgentAccountID;
}
/// Do additional processing TBD
}
}
}
Для модульных тестов правильно лиПредположим, что весь процесс в службе должен тестироваться поэтапно, поэтапно, подобно следующему:
ImportService_ProcessQueuedData_CallsDataAccessLayer_ToLoadQueue
ImportService_ProcessQueuedExcessIeedIccessIedI_Ice_Date_Ex_11012 * ImportService_ProcessQueuedData_WithInvoice_CallsDALToCreateAccountIfOneDoesNotExist
Вот типичный тест:
[TestMethod()]
public void ImportService_ProcessQueuedData_WithInvoice_CallsDALToCheckIfAgentAccountExists()
{
var accountDAL = MockRepository.GenerateStub<IAccountDAL>();
var importServiceDAL = MockRepository.GenerateStub<IImportServiceDAL>();
importServiceDAL.Stub(x => x.LoadQueuedData())
.Return(GetQueuedImportItemsWithInvoice());
accountDAL.Stub(x => x.GetAccountByAssocNo("FFFFF"))
.IgnoreArguments()
.Return(new Account() { AgentAccountId = 0 });
var importSvc = new ImportService(accountDAL, importServiceDAL);
importSvc.ProcessQueuedData();
accountDAL.AssertWasCalled(a => a.GetAccountByAssocNo("FFFFF"), o => o.IgnoreArguments());
accountDAL.VerifyAllExpectations();
}
Моя проблема заключается в том, что я выполняю так много настроек в каждом из этихстановится хрупким.Это правильный подход, и если да, то каковы некоторые указатели, чтобы избежать дублирования всех этих настроек в каждом гранулярном тесте?