私はまずRhino Mocksを初めて使っていると言っています。Rhino Mocks - テストリポジトリレイヤが "オブジェクト参照がインスタンスに設定されていません"エラーを返します。エラー
これを念頭において私はdatacontextの正しいメソッドがヒットしていることと、LINQ to SQLが正しくフィルタリングされていることを確認するために、Linq to SQLリポジトリレイヤーをユニットテストしようとしています。
〜は、対象の方法〜
明瞭さのために編集 - 'GetRecordWhereが' - リポジトリクラスで定義されています。 DataContextWockpper上のメソッド - GetTableを呼び出します。DataContextWrapperは、DataContextをモック可能にするために実装されたLinq to SQL DataContext(自動生成)に対する私のカスタムラッパーです。
public interface IDataContextWrapper : IDisposable
{
IQueryable<TName> GetTable<TName>() where TName : class;
}
public class DataContextWrapper : IDataContextWrapper
{
public IQueryable<TName> GetTable<TName>() where TName : class
{
return _db.GetTable<TName>().AsQueryable();
}
}
public class Repository : IRepository
{
public T GetRecordWhere<T>(Expression<Func<T, bool>> predicate) where T : class
{
return _dataContext.GetTable<T>().Where(predicate).SingleOrDefault();
}
}
「GetRecordWhere」メソッドを使用してqueryedすることができ照会可能な結果セットを提供するために、「GetTable」メソッドをスタブしようとしたときに、私が現在直面していますエラーがスローされます。
ArgumentNullExcpetion:値はnullにはできません。
Arg<Expression<Func<Billing, bool>>>.Is.Anything
..私もIs.NotNullと特定の述語で試してみました。
ユニットテストの例:
_dataContext = MockRepository.GenerateMock<IDataContextWrapper>();
[Test]
public void GetRecordWhere()
{
// Arrange
var billing = new Billing { BillingId = 1 };
var billingQueryList = new List<Billing> {billing};
const int testId = 1;
_dataContext.Stub(x => x.GetTable<Billing>()
.Where(Arg<Expression<Func<Billing, bool>>>.Is.Anything)
.SingleOrDefault())
.Return(billing);
_intRepository = new Repository(_dataContext);
// Act
var result = _intRepository.GetRecordWhere<Billing>(x => x.BillingId == testId);
// Assert
Assert.IsNotNull(result);
Assert.AreEqual(result.BillingId, testId);
_dataContext.AssertWasCalled(x => x.GetTable<Billing>());
}
これはRhinoMocksの私の理解では失敗していますか?
ご協力いただき誠にありがとうございます。
この質問は非常に長くなっています.3つのアップデートがあります。あなたの質問の元の部分は、NullReferenceExceptionを取得しています。後でArgumentNullExceptionの取得について言及します。関連する部品だけで問題が完全に失敗した場合、質問とコードを再編集できますか? – PatrickSteele
現在の問題とコードの説明でメインポストを更新 – M05Pr1mty
私の答えを更新しました。 – PatrickSteele