起こり
- 消費税計算などのテストを書いてるときmemberdataにdouble型になるような値がある、ただメソッド側の引数はint型指定になっているためmemberdata→どのような変換が行われているか知りたい。
例
public static object[][] SampleData
{
get
{
return new[]
{
(100 + 900) * 1.08 + (99 + 600) * 1.1
}
}
}
[Theory]
[MemberData(nameof(SampleData))]
public void someTest(int expected)
{
Assert.Equal(100, expected);
}
みたいな状態。
ひたすらデバッグで追う
https://github.com/xunit/xunit/blob/9f1684f5f74196d952f0085d7bde21aa20df6229/src/xunit.execution/Sdk/Frameworks/Runners/XunitTheoryTestCaseRunner.cs#L162
どうやらこのへんでMemberdataから引数への変換を行っているようだ。
今回のケースだとDouble→Intへは
Convert.ChangeType(arg, type, CultureInfo.CurrentCulture);
となっている。なので単純な(int)val
みたいなキャストとは違っていた。