ユニットテストを実行しようとしていて、[TestInitialize]
を実行する必要があります。機能がライブで動作しているが、ユニットテスト中ではない
this postで情報が見つかりました。私には意味がないので、それを修正する方法はわかりません。
[TestInitialize]
public void TestInitialize()
{
mock = new Mock<ILibraryRepository>();
books = new List<Book>()
{
new Book { Id = 0, Title = "Title 0", Edition = 0, PublicationDate = DateTime.Now, Author = { Id = 0, Name = "Author 0", DateOfBirth = DateTime.Now, DateOfDeath = DateTime.Now }, AuthorId = 0 },
new Book { Id = 1, Title = "Title 1", Edition = 1, PublicationDate = DateTime.Now, Author = { Id = 1, Name = "Author 1", DateOfBirth = DateTime.Now, DateOfDeath = DateTime.Now }, AuthorId = 1 },
new Book { Id = 2, Title = "Title 2", Edition = 2, PublicationDate = DateTime.Now, Author = { Id = 2, Name = "Author 2", DateOfBirth = DateTime.Now, DateOfDeath = DateTime.Now }, AuthorId = 2 }
};
mock.Setup(m => m.Books).Returns(books.AsQueryable());
var controller = new BooksController(mock.Object);
}
これはすべて上手く見えます。私はこのテストを実行する場合でも:
[TestMethod]
public void IndexLoadsValid()
{
// Arrange
var controller = new BooksController(mock.Object);
// Act
var result = controller.Index() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
を私は次のエラーを取得:
object reference not set to an instance of an object
をそして、これは明らかです。それはnullです。しかし、私が理解できないのはなぜですか?
デバッグは言う:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Assignment2.Models.Book.Author.get returned null.
そして、この関数は、私がプログラムを起動したときに動作しますので、これは私には意味がありません。
Book
モデルはここにある:
public interface ILibraryRepository
{
IQueryable<Book> Books { get; }
IQueryable<Author> Authors { get; }
Book Save(Book book);
Author Save(Author author);
void Delete(Book book);
void Delete(Author author);
}
任意のアイデアは、なぜ私はこのエラーを取得しています:
public class Book
{
[Key]
public int Id { get; set; }
[Required]
public string Title { get; set; }
[Display(Name = "Publication date")]
public DateTime? PublicationDate { get; set; }
public float? Edition { get; set; } // We might have a 2.5 edition. Rare but happens
public int AuthorId { get; set; }
public Author Author { get; set; }
}
ことができますが、私のILibraryRepository
がここにある場合、私は見当がつかない?
編集:HomeController
をBooksController
に変更しました。なぜ私はここで二つを混ぜ合わせたのか分かりません。
されている必要があります私はあなたの嘲笑リポジトリがHomeController' 'になっているか表示されません。 –
これはこれではありませんか? 'Mock = new Mock();' –
alex3wielki
これは 'var controller = new homeController(mock.Object);のようなものが必要だということを意味します。 – juharr