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