単体テスト(C# WPF)

C#

MsTest

Assert

Assert.AreEqual(expected, actual, message)

AssertEx.DoesNotThrow(() => this.TestMethod());

AssertEx.Throws<ArgumentNullException>(() => this.TestItemCount());

DataSource

DataRow

DynamicData

Enum等の値によって処理が異なる場合、DynamicDataを使って引数に要素を渡すことにより、対象のパターンを網羅してテストが行える。


[TestMethod]
[DynamicData(nameof(GetHogeState), DynamicDataSourceType.Method)]
public void MethodUpdateTotalStudyCountNormalTest(HogeState hogeState)
{
    switch (hogeState)
    {
        case hogeState.Initialized:
        case hogeState.Started:
            totalCount.Is(1);
            break;
        default:
            totalCount.Is(1);
            break;
    }
}


private static IEnumerable<object[]> GetHogeState()
{
    return DynamicDataProvider.GetValues<HogeState>();
}

Moq

SetUp

DbSetがSetUpできない

何も考えずにDbContextのDbSetをSetUpしようとするとコンパイルが通らない。
理由はDbSetがOverrideできないからで、MockでDbSetを使うには public virtual DbSet<T>が必要になる。

Moqを使ってEntityframeworkのモックを作成するには?【単体テスト】 - Qiita
C#の単体テスト用モックフレームワークといえば、Moqがデフォルトですが、Entityframeworkとの相性があまりよくありませんでした。 DbContextのモック実装を用意したり、実コードと差し替えるためにインターフェースを...

Where内の条件式のMock用の書き方が分からない

It.IsAny()で抽象化する。

Items.Count(x => x.Name == "hoge");
dbContextMock.Setup(x => x.Items.Count(It.IsAny<Func<TestEntity, bool>>())).Returns(1);

コメント