0

集成测试:

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 方法需要一个ChangeSet。

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

4

1 回答 1

0

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

为了能够测试您的代码,为您的解决方案创建一个新的“Silverlight 单元测试应用程序”。将包含一个默认测试,基本上看起来像这样(请注意,测试类是从SilverlightTest-class 派生的):

[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 上的这篇文章。

于 2012-11-29T09:22:27.717 回答