2017-04-14 12 views
0

こんにちは私は現在、小さくてシンプルな単体テストを統一して書いています。Unity3dユニットテストの問題

私はそれは次のようなパネルのアクティブ状態を変更する簡単なMainMenuActionsクラスがあります。

public class MainMenuActions : MonoBehaviour { 

     public GameObject panelMainMenu = new GameObject("Panel"); 

public void singlePlayerPressedFromMainMenu() 
    { 
     panelMainMenu.SetActive(false); 
    } 

} 

機能singlePlayerPressedFromMainMenuは()パネルのアクティブ状態を変更するために団結してボタンに設定されています。私は、次のしている私のユニットテストで

using UnityEngine; 
using UnityEditor; 
using NUnit.Framework; 

public class MainMenuTests { 

    [Test] 
    public void ClickingSinglePlayer_HidePanel_PanelHides() 
    { 

     //Arrange 
     var menu = new MainMenuActions(); 

     //Act 
     menu.singlePlayerPressedFromMainMenu(); 

     //Assert 
     menu.panelMainMenu.activeSelf.ToString().Equals("True"); 
    } 
} 

このテストはパスするが、その失敗したとします。デバッグするとき、私はactiveSelfが本当にfalseに設定されていることがわかりますが、それでも私のテストに合格します。私は何が欠けていますか?

+0

あなたは '等号()'の戻り値を何もしていません。 –

答えて

3

あなたは間違った方法でNUnitを使用したようです。 Assertionの使用を忘れましたか?それはAssertionを使用していることを

namespace UnitTestingExamples 
{ 
    using System; 
    using NUnit.Framework; 

    [TestFixture] 
    public class SomeTests 
    { 
    [Test] 
    public void TestOne() 
    { 
     int i = 4; 
     Assertion.AssertEquals(4, i); 
    } 
    } 
} 

注:ここではhttps://www.codeproject.com/Articles/3781/Test-Driven-Development-in-NETからexamplaryテストケースです。 1つのテストが失敗すると、アサーションがトリガされます。

それはあなたからの簡単な間違いかもしれませんが、これが文字通り他の読者のために詳細に何もしていない理由をもっと説明します。

コードでmenu.panelMainMenu.activeSelf.ToString().Equals("True");falseを返します。しかし、誰もが消費するわけではないので、この戻り値については体は気にしません。言い換えれば、あなただけの次の行の左側をスキップされます

void MyCompilerIsHappy 
{ 
    bool myBool = menu.panelMainMenu.activeSelf.ToString().Equals("True"); 
    menu.panelMainMenu.activeSelf.ToString().Equals("True"); 
} 

あなたはLHSを逃した場合、それはどうなりますことは、それはそれはかもしれ方「偽」または「真」を返すということですその戻り値はまったく使用されません。メソッドからの戻り値が消費されない場合、コンパイラは不平を言うことはありません。

void MyCompilerIsNotHappy 
{ 
    true; 
    false; 
    5; 
    "some string here"; 
} 

メソッドからの戻り値が使用されていないとき、コンパイラが文句を言わないだろう理由は、このような方法はの状態を変更することができるビジネスロジックを持っているかもしれないということです。しかし、それはあなたがこのような何かを行う場合は文句を言うでしょうそのような戻り値を使用する必要はなく、プログラマーは意図的に使用しないことを選択する場合があります。ここで

は、いくつかのユニットテストチュートリアルです:

http://www.nunit.org/index.php?p=quickStart&r=2.4

https://www.codeproject.com/Articles/3781/Test-Driven-Development-in-NET

http://www.4guysfromrolla.com/articles/011905-1.aspx

+0

あなたの返事をありがとう、これはAssert.AreEqual(menu.panelMainMenu.activeSelf、false); – arjwolf

+0

私はそれが助けてうれしい! – BrokenBacon

関連する問題