26
loading...
This website collects cookies to deliver better user experience
using FluentValidation.TestHelper;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace UsingObjectMothers
{
[TestClass]
public class CreditCardValidationTests
{
[TestMethod]
public void CreditCard_ExpiredYear_ReturnsInvalid()
{
var validator = new CreditCardValidator();
var creditCard = new CreditCard
{
CardNumber = "4242424242424242",
ExpirationYear = DateTime.Now.AddYears(-1).Year,
ExpirationMonth = DateTime.Now.Month,
Cvv = 123
};
var result = validator.TestValidate(creditCard);
result.ShouldHaveAnyValidationError();
}
[TestMethod]
public void CreditCard_ExpiredMonth_ReturnsInvalid()
{
var validator = new CreditCardValidator();
var creditCard = new CreditCard
{
CardNumber = "4242424242424242",
ExpirationYear = DateTime.Now.Year,
ExpirationMonth = DateTime.Now.AddMonths(-1).Month,
Cvv = 123
};
var result = validator.TestValidate(creditCard);
result.ShouldHaveAnyValidationError();
}
}
}
TestValidate()
and ShouldHaveAnyValidationError()
methods from FluentValidation to write better assertions.CreditCard
object and modified one single property for the given scenario. We had duplication and magic values when initializing the CreditCard
object.CreditCard
objects to avoid repetition.CreditCard
objects is to use an object mother.CreditCard
property with valid defaults and tweak it inside each test.[TestClass]
public class CreditCardValidationTests
{
[TestMethod]
public void CreditCard_ExpiredYear_ReturnsInvalid()
{
var validator = new CreditCardValidator();
// Instead of creating a new card object each time,
// we rely on this new CreditCard property
var request = CreditCard;
request.ExpirationYear = DateTime.Now.AddYears(-1).Year;
var result = validator.TestValidate(request);
result.ShouldHaveAnyValidationError();
}
[TestMethod]
public void CreditCard_ExpiredMonth_ReturnsInvalid()
{
var validator = new CreditCardValidator();
var request = CreditCard;
request.ExpirationMonth = DateTime.Now.AddMonths(-1).Month;
var result = validator.TestValidate(request);
result.ShouldHaveAnyValidationError();
}
// We have this new property to hold a valid credit card
private CreditCard CreditCard
=> new CreditCard
{
CardNumber = "4242424242424242",
ExpirationYear = DateTime.Now.Year,
ExpirationMonth = DateTime.Now.Month,
Cvv = 123
};
}
CreditCard
property in our test class and how we update its values from test to test.