5

このようなnull可能なパラメーターを持つインターフェースがあります

Result<Notice> List(int offset, int limit, Guid? publicationId, Guid? profileId, DateTime? toDate, ListingOrder order);

これは、このメソッドをモックしようとした方法です

mockNoticesClient.Setup(c => c.List(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<Nullable<Guid>>(), It.IsAny<Nullable<Guid>>(), It.IsAny<Nullable<DateTime>>(), Data.Notices.ListingOrder.DateDesc)).Returns(dataNotices);

次に、メソッドを使用しようとすると

var results = this.noticesClient.List(0, 100, null, profileId, latestNoticeTime, Data.Notices.ListingOrder.DateDesc);

この例外がスローされても、この行が実行されるたびに

... threw an exception of type 'System.NullReferenceException' ... {System.NullReferenceException}

パラメータに null を指定してセットアップを使用するなど、いくつかの異なる組み合わせを試しましたが、これも機能しません。私は最新バージョン(現在)であるMoq 4.0.10827を使用しています。

編集: noticesClientのコンストラクターは、dataNoticesClientのインターフェースを取ります

public Client(Data.Notices.INotices noticesClient)

このように初期化されます

mockNoticesClient = new Mock<Data.Notices.INotices>();
noticesClient = new Client(mockNoticesClient.Object);

mockNoticesClient.Setup(c => c.List(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<Nullable<Guid>>(), It.IsAny<Nullable<Guid>>(), It.IsAny<Nullable<DateTime>>(), It.IsAny<Data.Notices.ListingOrder>())).Returns(dataNotices);

mockNoticesClient.Setup(c => c.List(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<Guid?>(), It.IsAny<Guid?>(), It.IsAny<DateTime?>(), It.IsAny<Data.Notices.ListingOrder>())).Returns(dataNotices);
4

2 に答える 2

0

このテストをデバッグして、次のことを確認します。

Data.Notices.ListingOrder.DateDesc

最初の 3 つの値の 1 つが null の可能性があるため、NullReferenceExceptionスローされます

ところで、このような連鎖は設計上の欠陥を示している可能性があります。Demeter の法則を参照してください。

于 2012-09-07T11:48:27.850 に答える