Silverlight RIA服务-从测试中调用SaveChanges的位置

Silverlight RIA服务-从测试中调用SaveChanges的位置,silverlight,testing,wcf-ria-services,Silverlight,Testing,Wcf Ria Services,集成测试: UERDomainService uerDomainService; [TestInitialize] public void Setup() { uerDomainService = new UERDomainService(); } [TestMethod] public void GetUsersWithRoles_GivenRoleID1003_ShouldNotRe

集成测试:

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);
        }
然后在DeleteRoleMembership(rm)中,这是一种RIA服务代码生成方法:

 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方法需要更改集

问题:如何从测试中启动SubmitChanges管道?

请注意,由于Silverlight的异步性质和对底层RIA服务的调用,您不能(或者应该)在标准单元测试中简单地测试Silverlight代码

为了能够测试您的代码,请为您的解决方案创建一个新的“Silverlight单元测试应用程序”。将包括一个默认测试,基本上如下所示(请注意,测试类派生自
SilverlightTest
-class):


有关更多详细信息,请查看CodeProject。

这里有一个类似的问题:这看起来也会有一些提示:谢谢Spontifixus。这个线程也确实帮助了我:记住从SilverlightTest继承。@DaveMateer“记住从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();
    }
}