문제

저는 ADO.net 데이터 서비스(그리고 일반적으로 .net도 마찬가지입니다..)를 처음 사용합니다. nHibernate를 사용하여 데이터베이스를 읽고 쓰기 위해 데이터 서비스를 설정해야 하는 이 프로젝트를 진행하고 있습니다. 서비스:

[WebGet]
    [SingleResult]
    public Factory Factories(int Id)
    {
        try
        {
            Factory[] results = this.CurrentDataSource.Session.Linq<Factory>().Where(g => g.Id.Equals(Id)).ToArray();
            return results[0];
        }
        catch (Exception ex)
        {
            throw ex;
        }        

그리고 서비스에 대한 테스트를 만들었습니다.

[Test]
        public void CanReadFactoryDataService()
        {
            DataServiceContext ctx = new
                  DataServiceContext(new Uri("http://localhost:1413/DataService.svc"));
            var Factories = ctx.Execute<Factory>(
                  new Uri("Factories?Id=54", UriKind.Relative));
            Assert.IsNotNull(Factories);
            Factory factory = Factories.First<Factory>();
            {
                Console.WriteLine(factory.NAME);
            }

브라우저로 서비스를 실행할 때(예: http://localhost:1413/DataService.svc/Factories?Id=54), 서비스는 다음을 반환합니다.

<Factories p1:type="ADODS.Core.Factory">
<FactorY_CODE>abc</FactorY_CODE>
<NAME>Nameds</NAME>
<ADDRESS>Reinhardt strasse</ADDRESS>
<COMPENSATION_MODEL p1:null="true"/>
<B_CODE p1:null="true"/>
<Id p1:type="Edm.Int32">54</Id>
</Factories>

하지만 단위 테스트를 실행하면 다음 예외가 발생합니다.

TestCase 'Tests.DataServicesTests.CanReadFactoryDataService'
failed: System.InvalidOperationException : La secuencia no contiene elementos (The sequence contains no elements)
    en System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
    H:\ADODS\tests\ADODS.Tests\ADODS.Web\DataServicesTests.cs(22,0): en Tests.DataServicesTests.CanReadFactoryDataService()

프로젝트를 디버깅했더니 테스트가 서비스에 연결되고 서비스가 데이터를 반환하는데,

XML 데이터를 수신할 때 실제 객체로 변환하기 위해 수행해야 할 다른 작업이 있습니까?

나는 테스트를했다. string 대신에 객체 Factory 문제는 내 수업에 있는 것 같습니다. 뭔가 빠졌나요?

도움이 되었습니까?

해결책

마침내 나는 그것을 해결했습니다.서비스 참조를 추가하고(아직 수행하지 않았음) 테스트를 다음과 같이 변경했습니다.

[Test]
        public void CanReadFactoryDataService()
        {
            ServiceReference1.DataServiceContext ctx = new
                   ServiceReference1.DataServiceContext(new Uri("http://localhost:1413/DataService.svc"));
            var factories= ctx.Execute<Factory>(
                  new Uri("Factories?Id=54", UriKind.Relative));
            Assert.IsNotNull(factories);
            Factory factory = factories.First<Factory>();
            {
                Console.WriteLine(factory.ADDRESS);
            }

        }

이제 테스트를 통과했습니다.

Reinhardt strasse

1 passed, 0 failed, 0 skipped, took 3.48 seconds (NUnit 2.5.2).

지금은 그게 쉬웠던 것 같은데 모르면 어렵다는...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top