我正在使用 Xamarin Studio 开始使用 MvvmCross 进行 TDD。我试图首先测试发布到视图模型的消息的效果,以便仅在收到适当的消息时执行逻辑。
我将 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 很棒的教程都会很棒