Ho questo metodo, che ha più chiamate private: GetConfigStatuses()
, ApplyFilters()
, GetConfigListInfo()
.
Poiché questi non espongono nulla di pubblico, non posso testarli come farei per un pubblico. E non sto cambiando il livello di accesso, sarebbe un odore.
Quindi l'unica cosa che posso effettivamente verificare e dichiarare in questo metodo è la chiamata GetPackages()
. Questo è almeno come lo vedo io.
Ma non ne sono sicuro, perché sono abbastanza nuovo da prendere in giro:)
Di seguito è riportato il metodo che sto testando e uno dei miei test.
Le cose sembrano ok? Grazie:)
public IEnumerable<UIConfigListInfo> GetUiConfigs(string segment, UIConfigInfo uiConfigInfo)
{
try
{
var configStatus = string.IsNullOrEmpty(uiConfigInfo.Status) ? "Active" : uiConfigInfo.Status;
var configListInfoList = new List<UIConfigListInfo>();
foreach (var currentConfigStatus in GetConfigStatuses(configStatus))
{
var filters = ApplyFilters(segment, uiConfigInfo.Name.ToLowerInvariant(), currentConfigStatus.ToLowerInvariant(), uiConfigInfo.Version);
var packages = _storageRepository.GetPackages(filters, Order.Descending, configStatus).ToList();
foreach (Package package in packages)
{
try
{
//TODO: comment this.
var configListInfo = GetConfigListInfo(package, uiConfigInfo.Version, uiConfigInfo.Name, currentConfigStatus);
//TODO: comment this.
GetConfigDefinition(package.Data, configListInfo);
configListInfoList.Add(configListInfo);
}
catch (Exception ex)
{
//TODO: log! Throw ?
}
}
}
return configListInfoList;
}
catch (Exception ex)
{
//...
}
}
E il test qui sotto. È importante notare che la mia classe di servizio ha solo una dipendenza pubblica ( IStorageRepository
). Il GetPackages()
restituisce un List<Package>
.
[TestMethod]
public void TestMethod1()
{
//Arrange
var mockStorageRepository = new Mock<IStorageRepository>();
mockStorageRepository.Setup(s => s.GetPackages(It.IsAny<List<string>>(), Order.Ascending, "Active"));
var sut = new UIConfigService(mockStorageRepository.Object);
//Act
sut.GetUiConfigs("somesegment", new UIConfigInfo { Name = "TestFun" });
//Assert
mockStorageRepository.Verify(mock => mock.GetPackages(It.IsAny<List<string>>(), Order.Descending, "Active"), Times.Once);
}