J'ai le contrôleur ci-dessous qui communique via NServiceBus IEndpointInstance (solution de réponse/requête full duplex). Je voudrais tester la validation placée dans ce contrôleur, donc j'ai besoin de passer par un objet IEndpointInstance. Malheureusement, il n'y a aucune mention à ce sujet dans la documentation du site de Particular que j'ai pu trouver.Comment faire pour simuler IEndpointInstance de NServiceBus
Dans le package nuget NServiceBus.Testing, j'ai trouvé la classe TestableEndpointInstance, mais je ne sais pas comment l'utiliser.
J'ai le code de test ci-dessous et il compile, mais il se bloque juste quand je l'exécute. Je pense que quelque chose ne va pas autour du paramétrage de TestableEndpointInstance.
Quelqu'un pourrait m'aider avec un exemple?
Controller:
public CountryController(
IEndpointInstance endpointInstance,
IMasterDataContractsValidator masterDataContractsValidator)
{
this.endpointInstance = endpointInstance;
this._masterDataContractsValidator = masterDataContractsValidator;
}
[HttpPost]
[Route("Add")]
public async Task<HttpResponseMessage> Add([FromBody] CountryContract countryContract)
{
try
{
CountryRequest countryRequest = new CountryRequest();
this._masterDataContractsValidator.CountryContractValidator.ValidateWithoutIdAndThrow(countryContract);
countryRequest.Operation = CountryOperations.Add;
countryRequest.CountryContracts.Add(countryContract);
// nservicebus communication towards endpoint
return message;
}
catch (Exception e)
{
var message = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, e.Message);
return message;
}
}
test:
public CountryControllerTests()
{
TestableEndpointInstance endpointInstance = new TestableEndpointInstance();
// Validator instantiation
this.countryController = new CountryController(endpointInstance, masterDataContractsValidator);
}
[Theory]
[MemberData("CountryControllerTestsAddValidation")]
public async void CountryControllerTests_Add_Validation(
int testId,
CountryContract countryContract)
{
// Given
// When
Func<Task> action = async() => await this.countryController.Add(countryContract);
// Then
action.ShouldThrow<Exception>();
}
Pourquoi ne pas utiliser un cadre moqueur, comme Moq ou FakeItEasy pour créer une maquette IEndpointInstance – Alex
L'exemple fourni est incomplet. Fournissez un [mcve] qui peut être utilisé pour représenter le problème. Vous devez également être clair sur ce que vous essayez d'atteindre. Est-ce que cela doit être un test unitaire ou un test d'intégration? – Nkosi
@Alex: Bonnes questions. Je ne suis pas venu dans ma tête. Laisse moi essayer. – SayusiAndo