我如何获得上下文测试一个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);
有什么办法可以解决这个问题吗?

我如何获得上下文测试一个VideoViewModel (Xamarin,NUnitLite)

你真的需要上下文吗?或者你可以嘲笑它?如果您可以模拟它,那么使用这个包(可以通过nuget获得):

github:https://github.com/Moq/moq4

nuget:https://www.nuget.org/packages/Moq/

,但正如其他人在评论中所说,在viewModel中使用上下文并不是一个好的实践。这样做的原因是ViewModel必须是平台独立的。如果你想在iOS和WinPhone上重用viewModel,你就会遇到这些平台上不存在的上下文问题。

相关文章: