我正在使用Xamarin Studio使用MvvmCross开始TDD。我试图首先测试发布到视图模型的消息的效果,以便只有在收到适当的消息时才执行逻辑。如何使用IMvxMessenger对MvvmCross进行单元测试
我将Stuart的一些优秀教程一起入侵,导致位置数据成功传播以查看模型,然后更新iOS视图中的一些文本控件,地图标记等。
但是在我进一步深入之前,我想使用TDD进行编码。我如何人工设置视图模型并在我的测试工具中人为地发布消息给它? :
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任何伟大的教程将是非常美妙
您基本上可以创建MvxMessengerHub,如Greg Shackles github回购所示(请参阅下面的Stuart答案中的链接) –