LoginSignup
4
9

More than 5 years have passed since last update.

ZenjectでオブジェクトのTestRunnerを作る

Last updated at Posted at 2018-02-19

とりあえずTestRunnerで動かす時にどうするのか、流れをしるために簡単な例を試してみる
追記)今回はZenjectのフレームワークでテストするだけだったのでタイトル変えました。次回以降ちゃんとバインドします。

追記:
もうちょいちゃんとゲームぽいの書きました。

環境

Uniry 2017.3.0f3
Mac OSX 10.12.6
ビルドターゲットMacOSX
.NET 4.6相当

簡単なテストの確認

Githubのドキュメントが手元環境ではうまくいかなかったので以下のテストケースに変更
※具体的には
- PreInstall()とPostInstall()を呼んでいない
- Assert.ThrowsでTActualの型を要求される
の二点が問題となっていた。

修正した版はGistにでも貼っておきます。
本家にもプルリクしといたけど、プルリク素人のためrejectされちゃいそうなので。

TestLogger.cs
using System.Collections;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
using Zenject;

[TestFixture]
public class TestLogger : ZenjectIntegrationTestFixture {
    [SetUp]
    public void CommonInstall () {

        PreInstall ();
        Container.Bind<Logger> ().AsSingle ();
        PostInstall ();
    }

    [Test]
    public void TestFirstEntry () {
        var logger = Container.Resolve<Logger> ();

        logger.Write ("foo");
        Assert.That (logger.Log == "foo");
    }

    [Test]
    public void TestAppend () {
        var logger = Container.Resolve<Logger> ();

        logger.Write ("foo");
        logger.Write ("bar");

        Assert.That (logger.Log == "foobar");
    }

    [Test]
    public void TestNullValue () {
        var logger = Container.Resolve<Logger> ();
        Assert.Throws<System.ArgumentException> (() => logger.Write (null));
    }

    [UnityTest]
    public IEnumerator TestLoggerWithEnumeratorPasses () {
        var logger = Container.Resolve<Logger> ();
        Assert.IsNotNull (logger);
        yield return null;
        logger.Write ("foo");
        logger.Write ("bar");
        yield return new WaitForSeconds (0.5f);
        Assert.That (logger.Log == "foobar");
    }
}

簡単なテストの場合は

  • testerとなるクラスをZenjectIntegrationTestFixture継承とする
  • SetUpアトリビュートのついた関数内にバインディングをかく
  • 上記バインディングを挟むようにPre,PostInstall()を呼んであげる

で解決。簡単。すき。

4
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
9