Écriture de tests unitaires pour une classe d'application Service Fabric
J'écris des tests unitaires pour une classe d'application Service Fabric. Je rencontre des erreurs que je ne comprends pas comment corriger. La définition de classe est du genre:
namespace SearchService
{
internal sealed class SearchServiceClass : StatelessService
{
//variables defined followed by constructor
private string jsonStr;
public SearchServiceClass(StatelessServiceContext context)
: base(context)
{
//constructor stuff
}
public bool IsDataJsonLoaded
{
get
{
return !(jsonStr == null);
}
}
}
}
L'application a une classe de test définie comme suit:
namespace SearchService.Tests
{
//[TestClass]
public class SearchServiceClassTest
{
[Fact]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass();
Assert.True(searchServiceClass.IsDataJsonLoaded);
}
}
}
J'obtiens l'erreur suivante:
Il n'y a aucun argument donné qui correspond au paramètre formel requis 'context' de 'SearchServiceClass.SearchServiceClass (StatelessServiceContext)'.
Quelqu'un pourrait-il me dire comment résoudre ce problème?
Edit: J'ai regardé ServiceFabric.Mocks. Ce que je comprends, c'est que je dois utiliser le MockStatelessServiceContextFactory.Default
pour créer un contexte simulé. Comment puis-je faire cela, est-ce que la méthode suivante est la bonne?:
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Réponses
Oui, vous pouvez utiliser la bibliothèque ServiceFabric.Mocks pour créer une instance de test de votre service à l'aide du code suivant:
var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Comme alternative au Default
contexte, vous pouvez également créer une instance personnalisée:
var newUri = new Uri("fabric:/MockApp/OtherMockStatelessService");
var serviceTypeName = "OtherMockServiceType";
var partitionId = Guid.NewGuid();
var replicaId = long.MaxValue;
var context = new MockCodePackageActivationContext("fabric:/MyApp", "MyAppType", "Code", "Ver", "Context", "Log", "Temp", "Work", "Man", "ManVer");
var context = MockStatelessServiceContextFactory.Create(context, serviceTypeName, newUri, partitionId, replicaId);
var serviceInstance = new SearchServiceClass(context);
Voir cet exemple de test et celui-ci pour plus d'informations.