我如何获得上下文测试一个VideoViewModel (Xamarin,NUnitLite)
本文关键字:一个 VideoViewModel Xamarin NUnitLite 何获得 上下文 测试 | 更新日期: 2023-09-27 18:02:10
我想测试一个抽象的VideoViewModel在android上的具体实现。我使用的是VS 2013和NUnitLite。
为创建VideoViewModel实例,我需要活动上下文
下面是VideoViewModel的构造函数:
public VideoViewModelAndroid(Context context, IFileSystem fileSystem)
: base(fileSystem)
{
bool contextIsActivity = context is Activity;
ExceptionUtil.ThrowIf.IsFalse(() => contextIsActivity);
this.context = context;
this.videoView = (context as Activity).FindViewById<VideoView>(Resource.Id.videoView1); // Returns null for the videoView
this.videoView.Touch += videoView_Touch;
}
下面是我创建videoView的方法
context = MainActivity.con;
var view = new VideoViewModelAndroid(context, fileSystem);
上下文从这里来:
[Activity(Label = "IDS.Droid.Tests", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : TestSuiteActivity
{
public static Context con;
protected override void OnCreate(Bundle bundle)
{
// tests can be inside the main assembly
AddTest(Assembly.GetExecutingAssembly());
// or in any reference assemblies
// AddTest (typeof (Your.Library.TestClass).Assembly);
// Once you called base.OnCreate(), you cannot add more assemblies.
base.OnCreate(bundle);
//SetContentView(Resource.Layout.MainLayout);
con = this;
}
}
我从应用程序链接了布局,id在Resource.Designer.cs中表示。
但是在调用
之后它没有返回视图this.videoView = (context as Activity).FindViewById<VideoView>(Resource.Id.videoView1);
有什么办法可以解决这个问题吗?
你真的需要上下文吗?或者你可以嘲笑它?如果您可以模拟它,那么使用这个包(可以通过nuget获得):
github:https://github.com/Moq/moq4
nuget:https://www.nuget.org/packages/Moq/
,但正如其他人在评论中所说,在viewModel中使用上下文并不是一个好的实践。这样做的原因是ViewModel必须是平台独立的。如果你想在iOS和WinPhone上重用viewModel,你就会遇到这些平台上不存在的上下文问题。