asp.net-mvc - asp.net mvc - 如何快速高效地创建假测试对象

标签 asp.net-mvc model-view-controller unit-testing

我目前正在我的 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/

相关文章:

c# - 从 ASP.NET 到 MVC Razor 的计时器

model-view-controller - 在 MVC 应用程序中,应该由 Controller 还是模型处理数据访问?

model-view-controller - RESTeasy并返回带有模型的JSP页面

c# - 上传mvc文件时在浏览器中刷新c#

jquery - 有关使用 ASP.NET MVC 显示和允许编辑数据的建议吗?

jquery - 使用 jQuery 获取单选按钮的当前选定值

javascript - 如何从 MVC asp.net Controller 为 javascript 变量赋值

java - Apache Spark Streaming 的集成测试失败

c++ - 如何使用 CMake 隐藏头文件以进行单元测试

objective-c - Objective C 中的单元测试 -> 如何复制 sqlite 数据库