J'ai croix publié ce billet sur le groupe de discussion #moq à: http://groups.google.com/group/moqdisc/browse_thread/thread/569b75fd2cc1829dparamètres ref Mocking
hey les gens,
Je suis tombé sur un problème avec un param ref moquée que je suis sûr doit être évident, mais étant nouveau pour le cadre, je ne peux pas le travailler .
J'ai la méthode référentiel suivante:
public int SaveCard(int userId, CardPaymentMethodDto
cardPaymentMethodDto)
{
int? cardId = 0;
try
{
int result = this.dataContext.usp_PaymentMethod_Card_Insert(userId,
cardPaymentMethodDto.UserAccountReference,
cardPaymentMethodDto.EncryptedCardNumber,
cardPaymentMethodDto.BinRange,
cardPaymentMethodDto.LastFourDigits,
cardPaymentMethodDto.ExpiryMonth,
cardPaymentMethodDto.ExpiryYear,
cardPaymentMethodDto.IssueNumber,
cardPaymentMethodDto.IssuingBank,
cardPaymentMethodDto.IssuingCountry,
cardPaymentMethodDto.Scheme,
cardPaymentMethodDto.StartMonth,
cardPaymentMethodDto.StartYear,
cardPaymentMethodDto.BillingAddress.House,
cardPaymentMethodDto.BillingAddress.SubPremises,
cardPaymentMethodDto.BillingAddress.Street,
cardPaymentMethodDto.BillingAddress.Town,
cardPaymentMethodDto.BillingAddress.County,
cardPaymentMethodDto.BillingAddress.Postcode,
cardPaymentMethodDto.BillingAddress.Country,
cardPaymentMethodDto.DateRegistered,
ref cardId);
if (result <= 0)
{
CompanySystemSqlException tex = new
CompanySystemSqlException("Database communications error");
tex.Data.Add("UserId", userId);
tex.Data.Add("PaymentMethod", cardPaymentMethodDto.ToString());
Logger.LogException("SaveCard: result <= 0", tex);
throw tex;
}
}
catch (DbException ex)
{
CompanySystemSqlException tex = new
CompanySystemSqlException("Database communications error", ex);
tex.Data.Add("UserId", userId);
tex.Data.Add("PaymentMethod", cardPaymentMethodDto.ToString());
Logger.LogException("SaveCard: DbException", tex);
throw tex;
}
return cardId ?? 0;
}
un test unitaire j'est:
[Test]
public void SaveCard_ValidData_ShouldReturnValidCardId()
{
int cardId;
int? refCardId = 0;
dataContext.DefaultValue = DefaultValue.Mock;
dataContext.Setup(x =>
x.usp_PaymentMethod_Card_Insert(It.IsAny<int>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<DateTime>(), ref refCardId)).Returns(1);
cardId = paymentRepository.SaveCard(1, new CardPaymentMethodDto
{ BillingAddress = new AddressDto { Country = "", County = "", House =
"", Postcode = "", Street = "", SubPremises = "", Town = ""},
BinRange = "", Cv2 = 123,
DateRegistered = DateTime.Now, EncryptedCardNumber =
"jumble",
ExpiryMonth = "02", ExpiryYear = "2030", Id = 1,
IssueNumber = 1, IssuingBank = "", IssuingCountry = "",
LastFourDigits = "", LastUsed = DateTime.MinValue, Scheme
= "", StartMonth = "", StartYear = "",
UserAccountReference = ""});
Assert.That(cardId, Is.EqualTo(1));
}
Maintenant, évidemment, j'ai dû créer l'arbitre param (refCardId) dans l'unité test, ou je ne peux pas configurer le résultat attendu, mais refCardId <> la variable cardId du référentiel , donc il est évidemment défaillant (résultat de la première méthode revient à zéro).
Je suis sûr qu'il me manque quelque chose, mais quoi ...?
Merci pour toute aide, Cheers, Terry
Jetez un oeil à: http: // stackoverflow. com/questions/1068095/assigning-out-ref-paramètres-en-moq – Grzenio