Alcune delle nostre classi di business logic richiedono alcune dipendenze (nel nostro caso 7-10). Come tale quando arriviamo al test unitario, la creazione diventa piuttosto complessa.
Nella maggior parte dei test queste dipendenze spesso non sono richieste (solo alcune dipendenze sono richieste per particolari metodi).
Di conseguenza, i test unitari richiedono spesso un numero significativo di righe di codice per simulare queste dipendenze inutili (che non possono essere nulle a causa dei controlli null).
Ad esempio:
[Test]
public void TestMethodA()
{
var dependency5 = new Mock<IDependency1>();
dependency5.Setup(x => x. // some setup
var sut = new Sut(new Mock<IDependency1>().Object,
new Mock<IDependency2>().Object,
new Mock<IDependency3>().Object,
new Mock<IDependency4>().Object,
dependency5);
Assert.SomeAssert(sut.MethodA());
}
In questo esempio quasi la metà del test è occupata dalla creazione di dipendenze che non vengono utilizzate. Ho studiato un approccio in cui ho un metodo di supporto.
[Test]
public void TestMethodA()
{
var dependency5 = new Mock<IDependency1>();
dependency5.Setup(x => x. // some setup
var sut = CreateSut(null, null, null, null, dependency5);
Assert.SomeAssert(sut.MethodA());
}
private Sut CreateSut(IDependency1 d1, IDependency2 d2...)
{
return new Sut(d1 ?? new Mock<IDependency1>().Object,
d2 ?? new Mock<IDependency2>().Object,
}
Ma spesso queste cose si complicano molto rapidamente.
Qual è il modo migliore per creare queste classi BLL nelle classi di test per ridurre la complessità e semplificare i test?