Escrevendo UnitTests para uma classe de aplicativo do Service Fabric
Estou escrevendo testes de unidade para uma classe de aplicativo do Service Fabric. Estou tendo alguns erros que não entendo como consertar. A definição da classe é do tipo:
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);
}
}
}
}
O aplicativo possui uma classe de teste definida da seguinte forma:
namespace SearchService.Tests
{
//[TestClass]
public class SearchServiceClassTest
{
[Fact]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass();
Assert.True(searchServiceClass.IsDataJsonLoaded);
}
}
}
Eu obtenho o seguinte erro:
Não há nenhum argumento fornecido que corresponda ao parâmetro formal obrigatório 'context' de 'SearchServiceClass.SearchServiceClass (StatelessServiceContext)'.
Alguém poderia me dizer como consertar isso?
Edit: Estive olhando ServiceFabric.Mocks. O que eu entendo é que preciso usar o MockStatelessServiceContextFactory.Defaultpara criar um contexto de simulação. Como faço isso, é o seguinte da maneira certa ?:
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Respostas
Sim, você pode usar a biblioteca ServiceFabric.Mocks para criar uma instância de teste do seu serviço usando o seguinte código:
var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Como alternativa ao Defaultcontexto, você também pode construir uma instância personalizada:
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);
Veja este exemplo de teste e este para obter mais informações.