7

こんにちは、私は自分のウェブサイトを作成しています。非常にシンプルですが、できる限り多くの側面をテストすることにしました。私が想像できる状況(スクリプトやcssファイルの名前変更など)を説明できる有用なテストのみを書くという精神を使用する

私は Steve Sanderson の MVC 統合テスト フレームワークを使用しており、私のテストは以下のとおりです。

私の質問は 2 つあります。このレベルのテストは「多すぎる」のでしょうか。そうでない場合は、他のシナリオ (開発者が名前の変更などに関連するものなど) を考えられますか?

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;
    }
}
4

2 に答える 2

1

テストは常にコンテキストに依存し、目にするリスクがテストの量を導くはずです。

  • 変更後に一部が機能しなくなった場合、どの程度重要になりますか?
  • 何かが変わったときにこれらの部品が壊れることがあると思いますか?
  • ページの構造が変更された場合、これらのテストを維持することはどれほど大きな仕事になるでしょうか?
  • これらの部分は頻繁に変わると思いますか?それらを自動化することは報われますか?
  • 量が増えた場合、テストの実行にはどのくらい時間がかかりますか?最新の変更で何も壊れていないことを確認するために、その時間を頻繁に待つ準備はできていますか?

ページがあまり頻繁に変更されていない場合、この量はかなりのように見えます。物事のサンプルだけをテストするだけで十分かどうかも考えることができます。たとえば、ページに複数のパーツを含めているようです。それらが同じ場所から来ており、同じメカニズムに含まれている場合、他の人がそこにいる場合、1つを含めることが失敗する可能性は低いようです。

一方、量を減らすことは常に簡単です。学習時にこれから始めて、後でアプローチを変更する必要があるかどうかを確認できます。

于 2012-04-17T08:03:39.960 に答える
1

あなたのテストを見たときの私の反応は、ほとんどが実装の詳細を検証しているということです。行動を重視することをお勧めします。エンド ユーザーのサイトとのやり取りをテストします。情報の提示方法ではなく、情報が存在することを確認してください。

于 2012-04-17T09:26:23.320 に答える