错误:您必须调用Xamarin.Forms.Init() - Visual Studio Xamarin,单元测试错误

时间:2016-12-20 12:19:55

标签: c# android visual-studio-2012 xamarin.ios

我使用Xamarin在Visual Studio中创建了一个Android应用程序。我在visual studio中安装了一个模拟器。 applaction使用txt文件,我之前在模拟器上做过(File.WriteAllText)。问题是我无法进行单元测试。 DependencyService.Get抛出错误。

Test 
Result Message: Unable to create instance of class (...). Error: System.InvalidOperationException: You MUST call Xamarin.Forms.Init(); prior to using it..

我不确定我错在哪里,以及我应该在这里做些什么。

有一个IPersistence类,它从文件方法中加载。

public interface IPersistence
    {
        Task<Player[,]> Load(int x);
    }

我在另一个类中为android实现了它:

 public class AndroidDataAccess : IPersistence
 {
        public async Task<Player[,]> Load(int x)
        {
               /*...*/
        }
 }

单元测试代码:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Model;
using Persistence;
using Xamarin.Forms;
namespace UnitTestProject1
{
    [TestClass]
    public class Test1
    {
        private Model _model;
        private IPersistence _dataAccess = DependencyService.Get<IPersistence>(); //It throws an error.
        [TestInitialize]
        public void Initialize()
        {

            _model = new Model(_dataAccess);
            _model.GameWon += new EventHandler<GameWonEventArgs>(Model_GameWon);
            _model.GameOver += new EventHandler(Model_GameOver);
            _model.FieldChanged += new EventHandler<FieldChangedEventArgs>(Model_FieldChanged);
            _model.GuardChanged += new EventHandler<GuardChangedEventArgs>(Model_GuardChanged);
        }
        [TestMethod]
        public void BasicTest10()
        {
        _model.NewGame(10);
        Assert.AreEqual(4, _model.S);
        }

1 个答案:

答案 0 :(得分:0)

public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof UserSetting)) { return false; } UserSetting s = (UserSetting)o; return id == s.id && totalMatch = s.totalMatch; } 需要DependencyService上下文才能运行。这通常是在为Android创建Forms或为iOS创建MainActivity时创建的。对于您的测试,我建议为每个平台创建一个测试夹具,然后创建一个基于平台手动初始化AppDelegate的方法。

dataAccess