私はテストとMockを書くことでは新しいです。私は、Raw SQLを使ってデータを取得する方法を理解しようとしています。ここで私が持っているものです。SqlQueryを模擬する方法
私はDataContext.cs
public class DataContext : DbContext
{
public DataContext()
: base("Main")
{
}
public virtual DbSet<DbBook> Books { get; set; }
public virtual DbSet<DbMovie> Movies { get; set; }
}
私が持っているコントローラBooksController.cs
public class BooksController : ApiController
{
private readonly BookDataContext _db;
public BooksController()
{
_db = new BookDataContext();
}
public BooksController (BookDataContext context)
{
_db = context;
}
[HttpGet]
[Route("books")]
public Book GetBooks()
{
using (var dbContextTransaction = _db.Database.BeginTransaction())
{
var test = _db.Books.SqlQuery("select * from BOOK");
var test2 = from b in _db.Books
orderby b.Books
select b;
}
}
}
ていると私はテストに
[TestMethod]
public void GetBook()
{
var data = new List<DbBook>
{
new DbBook{ Book = "Book1"},
new DbBook{ Book = "Book2"}
}.AsQueryable();
var mockSet = new Mock<DbSet<DbScriptId>>();
mockSet.As<IQueryable<DbBook>>().Setup(m =>
m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<DbBook>>().Setup(m =>
m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<DbBook>>().Setup(m =>
m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<DbBook>>().Setup(m =>
m.GetEnumerator()).Returns(data.GetEnumerator());
mockSet.Setup(m => m.Find(It.IsAny<object[]>()))
.Returns<object[]>(sc => data.SingleOrDefault());
var mockContext = new Mock<DataContext>();
mockContext.Setup(c => c.Books).Returns(mockSet.Object);
var controller = new BooksController (mockContext.Object);
var books = controller.GetBook();
}
私が使用してデータを取得することができますがありますLinq(test2)がSqlQueryを使用すると、常にnull(テスト)になります。 SqlQueryを使用してそれを変更する方法Linqを使用するのと同じ結果が得られますか?また、InMemoryデータベースを作成すると、実際にはデータベースではなく、バックグラウンドでいくつかのリスト(タイプ= IQueriable)が作成されることが分かります。この問題の説明と解決方法を教えてください。
あなたは何を嘲笑していますか?生のSQLはすべての依存関係の注入を取り除き、何もあなたを黙らせません。あなたは何を試そうとしていますか? – lloyd
コードを編集する必要があります。 GetBooks()メソッドからいくつかの結果が得られたかどうかをテストしたいだけです。私はテストをデバッグするときにGetBooks()メソッドにジャンプし、 "test"変数がnullになる一方、 "test2"は必要なデータを取得します。さて、生のSQLステートメントをテストするには? – Rok