gpt4 book ai didi

ios - 如何使用 IMvxMessenger 对 MvvmCross 进行单元测试

转载 作者:可可西里 更新时间:2023-11-01 05:05:50 24 4
gpt4 key购买 nike

我正在使用 Xamarin Studio 通过 MvvmCross 开始 TDD。我试图首先测试将消息发布到 View 模型的效果,以便仅在收到适当的消息时才执行逻辑。

我将 Stuart 的一些优秀教程整合在一起,成功地将位置数据传播到 View 模型,然后更新 IOS View 上的一些文本控件、 map 标记等。

但在我进一步深入之前,我想使用 TDD 进行编码。我如何人为地设置 View 模型并在我的测试工具中人为地向它发布消息? :

public class MyViewModel : MvxViewModel
{
private readonly MvxSubscriptionToken _token;

public MyViewModel(ILocationService service, IMvxMessenger messenger)
{
//weak reference
_token = messenger.Subscribe<LocationMessage>(OnLocationMessage);
}

private void OnLocationMessage(LocationMessage locationMessage)
{
Lat = locationMessage.Lat;
Lng = locationMessage.Lng;
// Console.WriteLine("on loc msg {0:0.0000}, {1:0.0000}", Lat, Lng);
}

private double _lng;
public double Lng
{
get { return _lng; }
set
{
_lng = value;
RaisePropertyChanged(() => Lng);
}
}

private double _lat;
public double Lat
{
get { return _lat; }
set
{
_lat = value;
RaisePropertyChanged(() => Lat);
}
}
}


[TestFixture()]
public class LocTest
{
[Test()]
public void LocationMessageIsRecieved()
{
// im using nsubstitute to mock with
var locService = Substitute.For<ILocationService>();
var msgr = Substitute.For<IMvxMessenger>();
var vm = new Map2ViewModel(locService, msgr);

var locMsg = new LocationMessage(this, 1F, 2F);
msgr.Publish(locMsg);

var lat = vm.Lat;
Assert.AreEqual(2F, lat); // says lat is 0.0 and nunit doesnt let me debug the tests :(
}
}

任何关于使用 MvvmCross 进行 TDD 的优秀教程都很棒

最佳答案

Any great tutorials on TDD with MvvmCross would be fantastic

Greg Shackles 在 Evolve 上的演讲是一个很好的起点 - http://xamarin.com/evolve/2013#session-7wb0etd3r8

他的 CodeCamp 示例包含一组极好的单元测试示例 - http://www.gregshackles.com/2013/09/nyc-code-camp-8-mobile-apps/导致 https://github.com/gshackles/NycCodeCamp8/tree/master/CodeCamp.Core/tests/CodeCamp.Core.Tests/ViewModelTests

有关 Mvvm 跨单元测试的教程 - 包括 Mocking - 在 http://mvvmcross.wordpress.com/ 上的 N=29 中可用。

博客文章也可在 http://blog.fire-development.com/2013/06/29/mvvmcross-enable-unit-testing/ 上找到

关于ios - 如何使用 IMvxMessenger 对 MvvmCross 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19757437/

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