J'ai quelques problèmes pour tester un singleton. Lorsque j'exécute ce code, j'obtiens une erreur dans TestGetLogicalDevices(). CallTo() a échoué car le service n'est pas un faux objet. Lorsque j'essaye de créer un faux objet (code commenté), cela donne une erreur car RestService est un singleton avec un constructeur privé. Comment puis-je créer un faux objet de ce singleton?Faux singleton avec FakeItEasy
private RestService service;
[TestInitialize]
public void Init()
{
//service = A.Fake<RestService>();
service = RestService.Instance;
service.CreateClient("test", "test");
}
[TestMethod]
public async Task TestGetLogicalDevices()
{
var logicalDevices = (List<LogicalDevice>)A.CollectionOfFake<LogicalDevice>(10);
A.CallTo(() => service.GetLogicalDevices()).Returns(Task.FromResult(logicalDevices));
List<LogicalDevice> collectedData = await service.GetLogicalDevices();
Assert.AreEqual(2, collectedData.Count);
}
public async Task<List<LogicalDevice>> GetLogicalDevices()
{
var response = await client.GetAsync(apiBaseUrl + "/logical-devices");
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var logicalDevices = JsonConvert.DeserializeObject<List<LogicalDevice>>(json);
var sortedList = logicalDevices.OrderBy(logicalDevice => logicalDevice.Name).ToList();
return sortedList;
}
else
{
return null;
}
}
Mise à jour j'ai ajouté le code de ma méthode que je veux tester. Peut-être que quelqu'un a des suggestions pour de meilleurs tests?
Veuillez indiquer le code de RestService, au moins les bits pertinents. –
Vous ne pouvez pas amorcer une classe concrète pour qu'elle se comporte comme vous le souhaitez en utilisant un cadre de simulation. C'est à ça que servent les faux. Ce sont de fausses versions de dépendances qui peuvent être utilisées pour tester les classes qui en dépendent.Ce n'est pas clair ce que vous essayez d'affirmer avec ce test. –
@tomredfern J'ai ajouté le code de la méthode que je veux tester. Peut-être avez-vous une meilleure solution pour tester cela? –