【问题标题】:Unit test for an application应用程序的单元测试
【发布时间】:2015-05-12 08:45:19
【问题描述】:

我在 mvc 中显示图表。

 public class HomeController : Controller
    {
        MapContext context = new MapContext();

        public ActionResult Index()
        {

        }
    }

我如何编写测试用例来检查数据。我对 MVC 还很陌生

【问题讨论】:

  • 您对TDD有丰富的经验吗?从更抽象的角度回顾并了解它可能是值得的。您将需要设置一个测试项目,模拟应用程序的某些方面等。

标签: c# asp.net-mvc asp.net-mvc-4 tdd


【解决方案1】:

您会发现很难编写真正的单元测试,因为您正在实例化 MapContext 的具体实例。理想情况下,您会使用 IoC/Dependancy Injection 来注入您的 MapContext,然后您真的想为它创​​建一个接口,以便可以伪造/模拟它,否则您不仅仅是在测试控制器,而是在重新测试 MapContext 然后它是不再是单元测试而是集成测试.....丢失了吗?!

控制器看起来像:

public class HomeController : Controller
{
    IMapContext _context;

    public HomeController(IMapContext mapContext)
    {
        _context = mapContext;            
    }

    public ActionResult Index()
    {
        var x = (from c in _context.Area
                     select c.Name).ToArray();

       var y = (from c in _context.Area
                     select c.Pin).ToArray();

        var bytes = new Chart(width:500, height: 300)
        .AddSeries(
         chartType: "Column",
         xValue: x,
         yValues: y)
        .GetBytes("png");
        return File(bytes, "image/png");
    }
}

那么您的单元测试将类似于 (Nunit + Moq) :

[TestFixture]
public class HomeControllerTest
{
    Mock<IMapContext> _mapContext;

    [SetUp]
    public void SetUp()
    {
        _mapContext = new Mock<IMapContext>();
    }

    [Test]
    public void BasicTest()
    {
        HttpConfiguration configuration = new HttpConfiguration();
        HttpRequestMessage request = new HttpRequestMessage();

        var homeController = new HomeController(_mapContext.Object);
        homeController.Request = request;

        var result = homeController.Index();

        Assert.IsNotNull(result);
        Assert.AreEqual(<somevalue>, result.SomeProperty);
     }
}

显然,您需要输入适当的值来测试 SomeProperty 并将其更改为真实属性。

进一步阅读将了解更多关于

  • Ioc/依赖注入
  • Nunit
  • 起订量

编辑

这里有一些教程可以帮助您入门

http://www.asp.net/mvc/overview/older-versions-1/unit-testing/creating-unit-tests-for-asp-net-mvc-applications-cs

https://msdn.microsoft.com/en-GB/library/dd410597(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/ff847525(v=vs.100).aspx

【讨论】:

  • 我试过你的方法。但它似乎仍然不起作用
  • 什么不起作用?说没用也没用!您需要提供更多信息。我的方法确实有效,就像我每天为我的工作所做的那样。您要求某人向您展示如何编写测试,而我做到了。这里的每个人都建议你多阅读一些关于 TDD、单元测试 MVC 等的内容,你这样做了吗?虽然您尝试进行测试真的很好,但如果您是 C# 和 MVC 的新手,那么您将不得不做更多的学习。我已经编辑了我的答案并添加了指向可能帮助您开始单元测试 MVC 的教程的链接
【解决方案2】:

您可以按照以下步骤开始为您的操作方法编写单元测试用例

Creating Unit Tests for ASP.NET MVC Applications

MVC Unit Testing Unleashed

How should one unit test a .NET MVC controller?

【讨论】:

  • 你能具体一点吗?您是否在解决方案中创建了一个测试项目并尝试过?
  • @nik0lias 我对 c# 和 MVC 还很陌生。所以关于如何做的不多
猜你喜欢
  • 2017-08-05
  • 2015-08-13
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2016-02-27
  • 1970-01-01
  • 2017-01-30
相关资源
最近更新 更多