Unittest er en god ide.
Evt kan en jenkins server sættes op til at køre dem hver gang du pusher til et repository (som git).
Hvis du altså bruger det.
--
#0
Du skal anvende unittests. Jeg anbefaler xUnit som test-framework.
Når du siger "computerens dato skal sættes", så læser jeg det som at "Jeg bruger DateTime.Now og har derfor malet mig selv op i et hjørne ift. test".
Der er to fornuftige løsninger på dit problem; ingen af dem involverer at rette computerens ur.
Mulighed 1: Lav et abstraktionslag til at spørge om tiden i din kode.
I stedet for at sige DateTime.Now i din kode ville du i stedet have f.eks. følgende kode:
public interface CustomDateTime {
DateTime Now {get}
}
public class ActualDateTime : CustomDateTime {
public DateTime Now => DateTime.Now;
}
public class AdjustableDateTime : CustomDateTime {
private DateTime _timeToPortray
public AdjustableDateTime(DateTime timeToPortray){
_timeToPortray = timeToPortray;
}
public DateTime Now => _timeToPortray;
}
I din kode benytter du en instans af CustomDateTime interfacet til at spørge om tiden. Du giver din klasse en instans af det interface i dens constructor.
På den måde kan du, når du laver en instans af noget der skal testes og bruger den nuværende tid, selv bestemme om den får en "ActualDateTime" eller "AdjustableDateTime", hvor du kan angive datoen i den sidste.
Mulighed 2: Brug mocking af system-DLL'er med Fakes (google it)
I stedet for at lave et abstraktionslag, så benytter man en anden DLL end den, der normalt benyttes til DateTime.Now.
Det betyder at man kan lave områder i sin kode (f.eks. ens unit-tests) hvor DateTime.Now kører noget kode du har angivet i stedet for den kode der normalt returnerer dato.
Eksempel:
using (ShimsContext.Create()){
System.Fakes.ShimDateTime.NowGet = () => new DateTime(2014, 3,10);
Console.WriteLine(DateTime.Now); //Returns DateTime with value 10-03-2014 no matter the actual time.
}
At kunne "sætte tiden" i ens kode er essentielt når du har problemstillinger, der opfører sig forskelligt afhængig af datoen og jeg arbejder som regel altid med mulighed #1.
--
Tak for jeres svar :).
#3 lyder godt - kunne du være interesseret i nogle konsulent timer?
--