Escritura de UnitTests para una clase de aplicación de Service Fabric
Estoy escribiendo pruebas unitarias para una clase de aplicación de Service Fabric. Me estoy encontrando con algunos errores que no entiendo cómo solucionar. La definición de clase es del 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);
}
}
}
}
La aplicación tiene una clase de prueba definida de la siguiente manera:
namespace SearchService.Tests
{
//[TestClass]
public class SearchServiceClassTest
{
[Fact]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass();
Assert.True(searchServiceClass.IsDataJsonLoaded);
}
}
}
Obtuve el siguiente error:
No hay ningún argumento dado que corresponda al parámetro formal requerido 'contexto' de 'SearchServiceClass.SearchServiceClass (StatelessServiceContext)'.
¿Podría alguien decirme cómo solucionar esto?
Editar: He estado mirando ServiceFabric.Mocks. Lo que entiendo es que necesito usar el MockStatelessServiceContextFactory.Default
para crear un contexto simulado. ¿Cómo hago esto? ¿Es la siguiente la manera correcta ?:
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Respuestas
Sí, puede usar la biblioteca ServiceFabric.Mocks para crear una instancia de prueba de su servicio usando el siguiente código:
var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Como alternativa al Default
contexto, también puede crear una instancia 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);
Vea esta prueba de muestra y esta para obtener más información.