Написание модульных тестов для класса приложения Service Fabric
Я пишу модульные тесты для класса приложения Service Fabric. Я столкнулся с некоторыми ошибками, которые не понимаю, как исправить. Определение класса такого рода:
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);
}
}
}
}
В приложении есть тестовый класс, определенный следующим образом:
namespace SearchService.Tests
{
//[TestClass]
public class SearchServiceClassTest
{
[Fact]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass();
Assert.True(searchServiceClass.IsDataJsonLoaded);
}
}
}
Я получаю следующую ошибку:
Не указан аргумент, который соответствует обязательному формальному параметру context в SearchServiceClass.SearchServiceClass (StatelessServiceContext).
Подскажите, пожалуйста, как это исправить?
Изменить: я смотрел ServiceFabric.Mocks. Я понимаю, что мне нужно использовать MockStatelessServiceContextFactory.Default
для создания фиктивного контекста. Как мне это сделать, правильный ли способ ?:
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Ответы
Да, вы можете использовать библиотеку ServiceFabric.Mocks , чтобы создать тестовый экземпляр вашей службы, используя следующий код:
var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
В качестве альтернативы Default
контексту вы также можете создать собственный экземпляр:
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);
См. Этот образец теста и этот для получения дополнительной информации.