2016-05-27 9 views
3

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はサポートされている定数型ではありません"。

  • 誰でもこの問題の説明がありますか?
  • 修正プログラムや回避策はありますか?
+0

この問題を再現するには本当に十分ですか?新しいバージョンを「出荷」する前に見つけやすい問題のように聞こえます。 'public IAccount Create(ITransactionalEntity x、decimal y)'のように 'm.Create'メソッドが明白な方法で宣言されていますか、暗黙の型キャストが含まれていますか? –

+0

返事ありがとうございます、Jeppe。私はちょうどこの問題の原因を見つけました。小数点の引数はオプションの引数です: 'IAccount Create(ITransactionalEntity owner、decimal initialBalance = 0m);'。ここでの主な問題は、これがMoq 4.5.3で動作しているため、Moqのいくつかの大きな変更点があったことです。 – DMVC

+0

この新しい情報を含めるには、質問を編集する必要があります。おそらく、 'IAccountFactory'の' Create'を紹介する部分を示しているかもしれません。複数の過負荷(継承された過負荷を含む)がありますか? –

答えて

0

this Castle.Coreの説明を参照してください。デフォルト値を削除すると、この特定のテストの問題は解決しますが、すべてのテストで問題が解決されるとは限りません。

+0

良いリファレンス。 –

関連する問題