Saya baru mengenal Moq, dan saya ingin menulis unit test menggunakannya. Saya memiliki database dengan beberapa tabel, seperti:
EducationUser | Application
- UsrName - Student
- UsrPwd - CourseId
- UsrChallenge - Date
- IsTeacher - Grade
- FullName
Ini adalah database di localdb
, yang ingin saya tiru. Saya telah membuat entitas menggunakan Entity Framework. Antarmuka entitas ini adalah IEducationEntities
.
Sekarang saya ingin membuat objek tiruan dan melakukan beberapa pengujian terhadap beberapa Layanan Web, seperti:
[TestMethod()]
public void LoginTest()
{
HttpResponseMessage response = Request.CreateResponse(_accountController.Login("andrew", "DefaultPassword"));
Assert.IsTrue(response.IsSuccessStatusCode, "User unable to log in with correct login info");
}
Untuk itu, berdasarkan apa yang saya pahami dari dokumentasi, saya seharusnya mampu melakukan sesuatu seperti:
[TestClass()]
public class AccountControllerTests : ApiController
{
Mock<IEducationEntities> _entities = new Mock<IEducationEntities>(MockBehavior.Strict);
private AccountController _accountController;
public AccountControllerTests() {
_accountController = new AccountController(_entities.Object);
_entities.Setup(table => table.EducationUsers.UsrName).Returns("andrew");
_entities.Setup(table => table.EducationUsers.UsrPwd).Returns("DefaultPassword");
}
[TestMethod] //etc, defining tests below
Namun, ini tidak berhasil sama sekali, karena entitas yang dihasilkan dari database tampaknya tidak berisi informasi tentang subbidang, dan saya mendapatkan kesalahan:
'DbSet' tidak berisi definisi untuk 'UsrPwd' dan tidak ada metode ekstensi 'UsrPwd' yang menerima argumen pertama bertipe 'DbSet' yang dapat ditemukan (apakah Anda melewatkan arahan penggunaan atau referensi Majelis?)
Apa yang saya lewatkan? Bagaimana cara mengisi objek moq
dengan data uji yang memiliki struktur yang sama dengan database saya?
UsrPassword
, tetapi Anda menyebutnyaUsrPwd
dalam kode pengujian/tiruan Anda. - person Ben Rubin   schedule 20.05.2017