#c# #testing #nunit
#c# #тестирование #nunit
Вопрос:
В настоящее время я пытаюсь протестировать приведенный ниже код с помощью NUnit и сталкиваюсь с серьезными проблемами, поскольку оба они являются методами void, один вызывает другой, а второй вызывает еще два метода. Я пытался проверить вхождения различных вызываемых методов, но не уверен, возможно ли это с несколькими методами void.
public class ApplicationResponseService : IApplicationResponseService
{
private readonly ITenantLookUpService _lookUpService;
private readonly IConfigurationManagement _configurationManagement;
public ApplicationResponseService(ITenantLookUpService lookUpService, IConfigurationManagement configurationManagement)
{
_lookUpService = lookUpService;
_configurationManagement = configurationManagement;
}
public async void IterateTenants()
{
var allTenants = await _lookUpService.GetAllTenants();
var connectionName =
_configurationManagement.getConfig()[ConfigurationKeys.CONNECTION_LOOKUP_NAME];
foreach (var tenant in allTenants)
{
var tenantConnections = await _lookUpService.GetTenantDetails(tenant.OrganisationId);
{tenantConnections.Connections.Count} connections for {tenant.OrganisationId}");
processResponses(tenantConnections);
}
}
public async void processResponses(TenantConnectionDetails tenantDetails)
{
var organisationId = tenantDetails.OrgId;
var connection = _lookUpService.GetTenantConnectionDetails(tenantDetails.Connections, _configurationManagement.getConfig()[ConfigurationKeys.CONNECTION_LOOKUP_NAME]);
var onlineConnection = _lookUpService.GetTenantConnectionDetails(tenantDetails.Connections, _configurationManagement.getConfig()[ConfigurationKeys.CONNECTION_NAME]);
var responseToProcess = await collectResponses(organisationId, connection);
foreach (var response in responseToProcess.LoanAppResponse)
{
var message = response.WholeTransferSuccessful ? formatSuccessResponse(response) : formatFailureResponse(response);
message.OrganisationId = organisationId;
message.ConnectionName = onlineConnection;
EncryptAndSend(message, tenantDetails);
deleteResponses(response, connection, organisationId);
}
}
Я пытался пойти по пути издевательства над классом в целом. Затем вызов метода IterateTenants и проверка, были ли у ProcessTenants какие-либо вхождения, но, к сожалению, это был тупик.
Самая последняя попытка тестирования, если возникает метод IteractTenants, приведена ниже:
[Test]
public void testOverall()
{
var mock = new Mock<MortgageApplicationResponseService>();
mock.Setup(x => x.IterateTenants());
mock.Verify(x => x.IterateTenants(), Times.AtLeastOnce);
}
Любая информация или направление будут высоко оценены!
Комментарии:
1. Пожалуйста, уточните «попытка проверить вхождения различных вызываемых методов». Кроме того, о каком из двух методов вы спрашиваете здесь test — я вижу, что оба являются общедоступными и, несомненно, будут протестированы отдельно. Кроме того, можем ли мы предположить, что LookupService тестируется отдельно?
2. Также, пожалуйста, опубликуйте пример вашего теста. Это поможет нам понять, что вы пробовали.
3. Добавлена моя последняя попытка выше. Я надеюсь протестировать оба метода (IterateTenants и ProcessTenants). Да, LookupService будет тестироваться отдельно