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

次に、RIA Services コードで生成されたメソッドである 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 パイプラインを開始するにはどうすればよいですか?

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 に答える