記事一覧
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との相性があまり...
Where内の条件式のMock用の書き方が分からない
It.IsAny()で抽象化する。
Items.Count(x => x.Name == "hoge");
dbContextMock.Setup(x => x.Items.Count(It.IsAny<Func<TestEntity, bool>>())).Returns(1);
Mockのプロパティを利用可能にする
testMock.SetupProperty(x => x.TestProperty, "hoge")
//すべてのプロパティを利用する場合
testMock.SetupAllProperties();
public Class Test1
{
public string TestProperty { get; set; }
}
public Class Test2
{
private Test1 test1;
public Test2
{
this.test1 = new Test1();
}
public void TestMethod
{
this.TestProperty = "fuga";
}
}
var Test1Mock = new Mock<Test1>();
var Test2 = new Test2();
testMock.SetupProperty(x => x.TestProperty, "hoge")
AssertEx.DoesNotThrow(() => .TestMethod());
testMock.Object.TestProperty.Is("fuga")
コメント