Schreiben von UnitTests für eine Service Fabric-Anwendungsklasse
Ich schreibe Unit-Tests für eine Service Fabric Application-Klasse. Ich habe einige Fehler, die ich nicht beheben kann. Die Klassendefinition ist von der Art:
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);
}
}
}
}
Die Anwendung verfügt über eine Testklasse, die wie folgt definiert ist:
namespace SearchService.Tests
{
//[TestClass]
public class SearchServiceClassTest
{
[Fact]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass();
Assert.True(searchServiceClass.IsDataJsonLoaded);
}
}
}
Ich erhalte folgenden Fehler:
Es wird kein Argument angegeben, das dem erforderlichen formalen Parameter 'context' von 'SearchServiceClass.SearchServiceClass (StatelessServiceContext)' entspricht.
Könnte mir bitte jemand sagen, wie ich das beheben kann?
Bearbeiten: Ich habe mir ServiceFabric.Mocks angesehen. Was ich verstehe ist, dass ich das verwenden muss MockStatelessServiceContextFactory.Default
, um einen Scheinkontext zu erstellen. Wie mache ich das? Ist das Folgende der richtige Weg?:
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Antworten
Ja, Sie können die ServiceFabric.Mocks- Bibliothek verwenden, um eine Testinstanz Ihres Dienstes mithilfe des folgenden Codes zu erstellen:
var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Alternativ zum Default
Kontext können Sie auch eine angepasste Instanz erstellen:
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);
Sehen Sie diese Probe - Test und diese eine für weitere Informationen.