Moq 4.5.3を使用していました。 Moq Nugetパッケージを4.5.8という最新バージョンにアップデートすることを決定しました。
突然、多くのテストが失敗し始めました。問題は、オプションの引数にIt.IsAny<decimal>
を使用する場合です。私はネット4.6.1、NUnitの3.2.1を使用していMoq> = 4.5.7は例外を公開しています.IsAny <decimal>()
public interface IFoo { bool Method(decimal decimalArg = 0m); }
public class Some
{
public int SomeMethod(IFoo foo) => foo.Method(10m) ? 1 : 0;
}
[TestFixture]
public class SomeTests
{
[Test]
public void SampleTest()
{
var fooMock = new Mock<IFoo>();
fooMock.Setup(m => m.Method(It.IsAny<decimal>())).Returns(true);
var sut = new Some();
var actual = sut.SomeMethod(fooMock.Object);
Assert.That(actual, Is.EqualTo(1));
}
}
:
ベローは、それを証明するための単純な、愚かなテストです。 返される例外は、 "system.decimalはサポートされている定数型ではありません"。
- 誰でもこの問題の説明がありますか?
- 修正プログラムや回避策はありますか?
この問題を再現するには本当に十分ですか?新しいバージョンを「出荷」する前に見つけやすい問題のように聞こえます。 'public IAccount Create(ITransactionalEntity x、decimal y)'のように 'm.Create'メソッドが明白な方法で宣言されていますか、暗黙の型キャストが含まれていますか? –
返事ありがとうございます、Jeppe。私はちょうどこの問題の原因を見つけました。小数点の引数はオプションの引数です: 'IAccount Create(ITransactionalEntity owner、decimal initialBalance = 0m);'。ここでの主な問題は、これがMoq 4.5.3で動作しているため、Moqのいくつかの大きな変更点があったことです。 – DMVC
この新しい情報を含めるには、質問を編集する必要があります。おそらく、 'IAccountFactory'の' Create'を紹介する部分を示しているかもしれません。複数の過負荷(継承された過負荷を含む)がありますか? –