gpt4 book ai didi

silverlight - 使用 MVVM Light 和 DispatcherHelper 进行单元测试

转载 作者:行者123 更新时间:2023-12-01 01:31:21 25 4
gpt4 key购买 nike

我有一个使用 MVVM Light Toolkit 的 SL4 应用程序。在 View 模型中,我调用从 OData 服务检索数据的数据服务。在 VM 中,我使用 DispatcherHelper 实用程序类(MVVM Light 的一部分)从传递给数据服务的回调中的数据更新 VM 上的属性。例如,我的 View 模型方法如下所示:

public string CurrentUserLogin {
get {
if (string.IsNullOrEmpty(_currentUserLogin))
RetrieveCurrentUserLogin();
return string.IsNullOrEmpty(_currentUserLogin) ? _currentUserLogin : _currentUserLogin.Replace(@"\\", @"\");
}
set {
if (_currentUserLogin != value) {
_currentUserLogin = value;
RaisePropertyChanged(CurrentUserLoginPropertyName);
}
}
}

private void RetrieveCurrentUserLogin() {
DataService.GetCurrentUserLogin(result => {
DispatcherHelper.UIDispatcher.BeginInvoke(() => {
CurrentUserLogin = result;
});
});
}

这是我的数据服务的样子:
public void GetCurrentUserLogin(Action<string> callback) {
// create query request
var query = OnDemandContext.CreateQuery<string>("GetCurrentUserLogin");
var request = (HttpWebRequest)WebRequest.Create(query.RequestUri);
request.BeginGetResponse(asyncResult => {
var responseStream = request.EndGetResponse(asyncResult).GetResponseStream();
var responseDocument = XDocument.Load(responseStream);
callback(responseDocument.Root.Value);
}, null);
}

当我运行我的 SL 应用程序时,一切都很好。然而,我遇到的问题是当我尝试使用 SL 单元测试框架针对它编写单元测试时。我可以毫无问题地测试我的数据服务,但 DispatcherHelper 似乎在我的所有测试中投入了 Spanner ,因为 DispatcherHelper.UIDispatcher 在触发时始终为空。我假设它与初始化(在我的 SL 应用程序的 Application_Startup() 中)有关。我尝试在我的测试应用程序中初始化它,但这没有帮助。我也试过使用 DispatcherHelper.CheckBeginInvokeOnUI() 但这对问题没有影响。

想法?

最佳答案

交流电,

我刚刚创建了一个简单的 SL UT 项目,我在 App.XAML.CS 中做了这个

private void Application_Startup(object sender, StartupEventArgs e)
{
RootVisual = UnitTestSystem.CreateTestPage();
DispatcherHelper.Initialize();
}

然后我将其设置为测试(在tests.cs中):
[TestMethod]
public void TestMethod1()
{
Assert.IsNotNull(DispatcherHelper.UIDispatcher, "UI Dispatcher should not be null");

DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
// Do nothing
var x = 1;
});
}

那对我有用。我什至在“var x = 1;”上设置了一个断点它击中了断点。这能解决您的问题吗? (如果是,请将其标记为答案)。

关于silverlight - 使用 MVVM Light 和 DispatcherHelper 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com