Модульных тестов для платформы SquishIt


Для немного фона, я участник SquishIt и решил, что я должен начать очистку беспорядок модульные тесты (мой обновленный вариант один набор тестов и оригинальный набор тестов). После решения только в части "переписать", я полагал, что это будет хорошая возможность узнать, попробовать, понять и тестирование в стиле BDD для, будем надеяться, поможет улучшить модульные тесты пишутся и побежал. Я решил пойти с NSpec после знакомства с некоторыми из вариантов там.

Моя проблема просто пытается сломать тестов в соответствующую "группировки", которые логически осмыслить и "соответствовать" xSpec. Вот что я сделал до сих пор и проходит все тесты, как ожидалось:

using NSpec;
using SquishIt.Framework;
using SquishIt.Framework.JavaScript;

namespace SquishIt.Tests
{
    class describe_JavaScriptBundle : nspec
    {
        public JavaScriptBundle bundle;

        public void AddTest1JS()
        {
            bundle.Add("test.js");
        }
    }

    class when_I_create_a_bundle : describe_JavaScriptBundle
    {
        void before_each()
        {
            if (bundle == null)
            {
                bundle = Bundle.JavaScript();
            }
        }

        void and_add_no_files()
        {
            it["GroupBundles containskey default"] = () => bundle.GroupBundles.ContainsKey("default").is_true();
            it["has no Assets"] = () => bundle.GroupBundles["default"].Assets.Count.Is(0);
        }
    }

    class then_I_add_a_file : when_I_create_a_bundle
    {
        void before_each()
        {
            AddTest1JS();
        }

        void it_should_contain_only_one_file()
        {
            bundle.GroupBundles["default"].Assets.Count.Is(1);
        }
    }

    class then_I_add_the_same_file : then_I_add_a_file
    {
        void it_should_still_contain_only_one_file()
        {
            bundle.GroupBundles["default"].Assets.Count.Is(1);
        }
    }
}

Как я могу улучшить это или я уже на верном пути?



481
4
задан 29 июля 2011 в 03:07 Источник Поделиться
Комментарии
2 ответа

Вот как я написал большинство моих тестов NSpec, я обычно начинаю в связи с актом. Этот сухой спецификацию. Если я делаю слишком много "выступает", я в конечном итоге разбить его на отдельные спецификации.

class describe_JavaScriptBundle : nspec
{
JavaScriptBundle bundle;

void AddTest1JS()
{
bundle.Add("test.js");
}

void before_each()
{
bundle = Bundle.JavaScript();
}

void adding_a_bundle()
{
context["no files added"] = () =>
{
it["GroupBundle contains default key"] = () =>
bundle.GroupBundles.ContainsKey("default").is_true();

it["has no Assets"] () =>
bundle.GroupBundles["default"].Assets.Count.Is(0);
};

context["adding one file"] = () =>
{
act = () => AddTest1JS();

it["contains the file"] = () =>
bundle.GroupBundles["default"].Assets.Count.Is(1);

context["adding the same file again"] = () =>
{
act = () => AddTest1JS();

it["should still only contain one file"] = () =>
bundle.GroupBundles["default"].Assets.Count.Is(1);
};
};
}
}

4
ответ дан 8 августа 2011 в 06:08 Источник Поделиться

Я только начал использовать вчера вечером NSpec себя. Мне очень нравится, как выразительно он может быть, хотя я вижу, как легко это, чтобы получить в наследство классе бардак (я, конечно, сделал прошлой ночью! :).

Вот мой предложенный способ кодирования тест:

public class describe_JavaScriptBundle : nspec
{
protected JavaScriptBundle bundle;

private void CreateBundle()
{
if (bundle == null)
{
bundle = Bundle.JavaScript();
}
}

private void after_each()
{
bundle = null;
}

public void Bundle_Contains_No_Files()
{
it["When I create a new bundle"] = this.CreateBundle;
it["And bundle contains no files"] = () => { };
it["Then bundle will contain default key"] = () => { };
it["And bundle will have no assets"] = () => { };
}

public void Bundle_Contains_One_File()
{
it["When I create a new bundle"] = this.CreateBundle;
it["And bundle contains one file"] = () => bundle.Add("test.js");
it["Then bundle should have one asset"] = () => { };
}

public void Add_Same_File_To_Bundle()
{
it["When I create a new bundle"] = this.CreateBundle;
it["And bundle contains one file"] = () => bundle.Add("test.js");
it["When I add the same file to the bundle"] = () => bundle.Add("test.js");
it["Then bundle should have one asset"] = () => { };
}
}

Ключевым моментом здесь является, на выходе вы получите:

describe JavaScriptBundle <- Feature
Bundle Contains No Files <- Scenario
When I create a new bundle
And bundle contains no files
Then bundle will contain default key
And bundle will have no assets
Bundle Contains One File <- Scenario
When I create a new bundle
And bundle contains one file
Then bundle should have one asset
Add Same File To Bundle <- Scenario
When I create a new bundle
And bundle contains one file
When I add the same file to the bundle
Then bundle should have one asset

Обратите внимание, как я стараюсь, чтобы описать эту функцию и каждого сценария. Таким образом я могу визуально увидеть, как в каждом случае он проверял. Я никоим образом не утверждаю, что имея наследство в плохого, просто в вашем случае я не думаю, что тесты достаточно, чтобы гарантировать это сложно.

Так заполнить бланки для тестов и дать ему шанс. Дайте мне знать, если это работает для вас.

Ура.
Иак.

1
ответ дан 7 августа 2011 в 09:08 Источник Поделиться