2012-11-22 2 views
0

통합 테스트에서 SaveChanges를 호출하기 :RIA 서비스 - 테스트

RIA 서비스 코드 genned 방법이다 DeleteRoleMembership (RM)에 다음
UERDomainService uerDomainService; 

     [TestInitialize] 
     public void Setup() 
     { 
      uerDomainService = new UERDomainService(); 
     } 

[TestMethod] 
     public void GetUsersWithRoles_GivenRoleID1003_ShouldNotReturnMateerAsSoftDeleted() 
     { 
      // blah    

      Assert.AreEqual(0, thing.Count()); 

      // blah 

      uerDomainService.DeleteRoleMembership(rm); 
     } 

:

public void DeleteRoleMembership(RoleMembership roleMembership) 
     { 
      if ((roleMembership.EntityState != EntityState.Detached)) 
      { 
       this.ObjectContext.ObjectStateManager.ChangeObjectState(roleMembership, EntityState.Deleted); 
      } 
      else 
      { 
       this.ObjectContext.RoleMemberships.Attach(roleMembership); 
       this.ObjectContext.RoleMemberships.DeleteObject(roleMembership); 
      } 

      // added to get tests working 
      ObjectContext.SaveChanges(); 
     } 

는 왜해야합니까 내 시험을하기 위해 이걸 넣어 둬?

내 Silverlight 앱이 작동하는 데 필요하지 않습니다. 저는 RIA의 저축 파이프 라인과 관련이 있습니다. uerDomainService.Submit 메소드에는 ChangeSet이 필요합니다.

질문 : 테스트에서 SubmitChanges 파이프 라인을 시작하려면 어떻게합니까?

+0

여기에도 비슷한 질문이 있습니다. http://stackoverflow.com/questions/5003212/do-i-need-to-call-my-domain-services-context-savechanges-after-adding-a-new- ent – rohancragg

+0

이것은 약간의 힌트도 가지고있는 것처럼 보입니다. http://www.silverlightshow.net/items/WCF-RIA-Services-Part-8-testing-and-Debugging.aspx – rohancragg

답변

0

Silverlight의 비동기 특성과 기본 RIA 서비스 호출로 인해 표준 단위 테스트에서 Silverlight 코드를 테스트 할 수 없다는 점에 유의하십시오.

코드를 테스트하려면 솔루션에 "Silverlight Unit Test Application"을 새로 만드십시오. 기본 테스트는 기본적으로 (테스트 클래스는 SilverlightTest - 클래스에서 파생 참고)과 같이 표시됩니다 것을 포함됩니다 :

[TestClass] 
public class SomeTests : SilverlightTest 
{ 
    [TestMethod] 
    [Asynchronous] 
    public void CanDownloadDataThenChangeAndSubmitChanges() 
    { 
     var target = new YourDomainContext(); 

     // Arrange 
     this.EnqueueCallback(() => target.Load(target.GetSomethingsQuery())); 
     this.EnqueueConditional(() => !target.IsLoading);   
     this.EnqueueCallback(() => Assert.IsTrue(target.Somethings.Any())); 

     // Act 
     this.EnqueueCallback(() => target.Somethings.First().SomeProperty = "NewValue"); 
     this.EnqueueCallback(() => target.SubmitChanges()); 

     // Assert 
     this.EnqueueConditional(() => !target.IsSubmitting)); 
     this.EnqueueCallback(() => Assert.IsFalse(target.HasChanges)); 
     this.EnqueueTestComplete(); 
    } 
} 

좀 더 자세한 정보는 CodeProject의에 this article에서보세요.

+1

감사합니다. Spontifixus. 이 스레드는 정말 나를 도왔습니다. http://social.msdn.microsoft.com/Forums/en-US/vstest/thread/5e991b0d-8061-4c4e-a17d-82b4abd58d6c SilverlightTest에서 상속하는 것을 잊지 마십시오. –

+0

@DaveMateer "SilverlightTest에서 상속받는 것을 잊지 마십시오."- 좋은 지적입니다, 감사합니다. 나는 그것을 나의 대답에 덧붙였다. – Spontifixus