Service Fabric 애플리케이션 클래스에 대한 UnitTests 작성

Dec 16 2020

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);
        }
    }
}

다음과 같은 오류가 발생합니다.

'SearchServiceClass.SearchServiceClass (StatelessServiceContext)'의 필수 형식 매개 변수 'context'에 해당하는 인수가 없습니다.

누군가이 문제를 해결하는 방법을 알려주시겠습니까?

편집 : ServiceFabric.Mocks를보고 있습니다. 내가 이해 MockStatelessServiceContextFactory.Default하는 것은 모의 컨텍스트를 만들기 위해를 사용해야한다는 것 입니다. 이 작업을 수행하려면 다음이 올바른 방법입니까? :

var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);

답변

1 LoekD Dec 16 2020 at 18:46

예, 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);

참고 이 샘플 테스트 와 이것 자세한 내용입니다.