在简单视图上进行太多测试
本文关键字:太多 测试 简单 视图 | 更新日期: 2023-09-27 18:31:25
嗨,我正在整理我的网站,虽然它非常简单,但我决定尽可能多地测试它。使用只编写有用的测试的精神,这些测试可以解释我可以想象发生的情况(重命名脚本或css文件等)
我正在使用Steve Sanderson的MVC集成测试框架,我的测试如下。
我的问题是双重的,这种级别的测试是否"太多",如果没有,您还能想到哪些其他场景(与开发人员相关,例如重命名或其他任何内容)。
using System.Web;
using System.Web.Mvc;
using MvcIntegrationTestFramework.Hosting;
using NUnit.Framework;
using website.Properties;
namespace website.tests
{
[TestFixture]
public class HomeControllerIndexTests
{
[TestFixtureSetUp]
public void Setup()
{
appHost = AppHost.Simulate("Website");
}
[Test]
public void HomeControllerIndexReturnsTheIndexView()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.AreEqual("Index", ((ViewResult)result.ActionExecutedContext.Result).ViewName);
});
}
[Test]
public void HomeControllerIndexReturnsCorrectRouteData()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.AreEqual("Home", result.ActionExecutedContext.RouteData.Values["controller"]);
});
}
[Test]
public void HomeControllerIndexReturnsViewResult()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.IsInstanceOf(typeof(ViewResult), result.ActionExecutedContext.Result);
});
}
[Test]
public void HomeControllerIndexReturnsNoError()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.IsNull(result.ResultExecutedContext.Exception);
});
}
[Test]
public void HomeControllerIndexReturnsViewWithSiteCssFile()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.IsTrue(result.ResponseText.Contains("/Content/Site.css"));
});
}
[Test]
public void HomeControllerIndexReturnsViewWithCorrectTitle()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains("<title>{ me: danielelliott.info(); }</title>"));
});
}
[Test]
public void HomeControllerIndexReturnsViewContainingBanner()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
var expected = HttpUtility.HtmlEncode(Resources.SiteName);
Assert.IsTrue(result.ResponseText.Contains(expected));
});
}
[Test]
public void HomeControllerIndexViewIncludesBioParagraph()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
var expected = HttpUtility.HtmlEncode(Resources.Bio.ToLowerInvariant());
Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected));
});
}
[Test]
public void HomeControllerIndexViewIncludesServicesParagraph()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
var expected = HttpUtility.HtmlEncode(Resources.Services.ToLowerInvariant());
Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected));
});
}
[Test]
public void HomeControllerIndexViewIncludesHistoryParagraph()
{
appHost.Start(session =>
{
var result = session.Get("/Home/Index");
var expected = HttpUtility.HtmlEncode(Resources.History.ToLowerInvariant());
Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected));
});
}
private AppHost appHost;
}
}
测试始终与上下文相关,您看到的风险应指导测试量。
- 如果某些部件在更改后无法正常工作,那将有多重要?
- 你相信这些部件在改变时会断裂吗?
- 如果页面结构发生变化,维护这些测试的任务有多大?
- 你相信这些部分会经常变化吗?自动化它们是否值得?
- 当数量增加时,运行测试需要多长时间?您是否准备好经常等待这段时间,看看最新的更改没有破坏任何东西?
如果页面不经常更改,则此数量似乎相当多。您还可以考虑仅测试一个样本是否就足够了。例如,您似乎在页面中包含多个部分。如果它们来自同一位置并且包含相同的机制,那么如果其他人在那里,则包括一个似乎不太可能失败。
另一方面,减少数量总是更容易。您可以在学习时从这个开始,然后看看以后是否需要更改方法。
当我看到您的测试时,我的反应是它们主要验证实现细节。我建议你专注于行为。测试最终用户与站点的交互。验证信息是否存在,而不是信息的呈现方式。