我目前正在我的 mvc 应用程序中测试 Controller ,我正在创建一个用于测试的假存储库。但是,与在实际存储库上相比,我似乎正在编写更多代码并花费更多时间在假货上。这样对吗?
我的代码如下:
Controller
public partial class SomeController : Controller
{
IRepository repository;
public SomeController(IRepository rep)
{
repository = rep;
}
public virtaul ActionResult Index()
{
// Some logic
var model = repository.GetSomething();
return View(model);
}
}
IRepository
public interface IRepository
{
Something GetSomething();
}
假仓库
public class FakeRepository : IRepository
{
private List<Something> somethingList;
public FakeRepository(List<Something> somethings)
{
somthingList = somthings;
}
public Something GetSomething()
{
return somethingList;
}
}
虚假数据
class FakeSomethingData
{
public static List<Something> CreateSomethingData()
{
var somethings = new List<Something>();
for (int i = 0; i < 100; i++)
{
somethings.Add(new Something
{
value1 = String.Format("value{0}", i),
value2 = String.Format("value{0}", i),
value3 = String.Format("value{0}", i)
});
}
return somethings;
}
}
实际测试
[TestClass]
public class SomethingControllerTest
{
SomethingController CreateSomethingController()
{
var testData = FakeSomethingData.CreateSomethingData();
var repository = new FakeSomethingRepository(testData);
SomethingController controller = new SomethingController(repository);
return controller;
}
[TestMethod]
public void SomeTest()
{
// Arrange
var controller = CreateSomethingController();
// Act
// Some test here
// Arrange
}
}
所有这些似乎都是很多额外的代码,尤其是当我有多个存储库时。有没有更有效的方法来做到这一点?也许使用模拟?
谢谢
最佳答案
您可以模拟存储库。
(我使用 Moq , Mock a database repository using Moq )
关于asp.net-mvc - asp.net mvc - 如何快速高效地创建假测试对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068302/