2016-12-20 12 views
0

Visual StudioでXamarinを使用してアンドロイドアプリケーションを作成しました。ビジュアルスタジオにエミュレータをインストールしました。 applactionはtxtファイルを使用しています。これは先にエミュレータで作成したものです(File.WriteAllText)。問題は、単体テストを実行できないことです。 DependencyService.Getはエラーをスローします。エラー:Xamarin.Forms.Init()を呼び出さなければなりません - Visual Studio Xamarin、ユニットテストエラー

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); 
    } 

私は別のクラスでアンドロイドのためにそれを実装:

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

あなたは何をテストしていますか?あなたのテストを教えてください。 – EpicSam

答えて

0

DependencyServiceが動作するFormsコンテキストが必要です。これは、通常Androidの場合はMainActivity、iOSの場合はAppDelegateを作成するときに作成されます。あなたのテストでは、各プラットフォーム用のテストフィクスチャを作成し、プラットフォームに基づいて手動でdataAccessを初期化するメソッドを作成することをお勧めします。

[TestFixture(Platform.Android)] 
[TestFixture(Platform.iOS)] 
public class Test1 { 
    ... 
    ... 
    private IPersistence InitialisePersistance(Platform platform) { ... } 
} 
関連する問題