Юнит-тестирование Silverlight - PullRequest
7 голосов
/ 21 ноября 2008

Я использую фреймворк Silverlight UnitTest У кого-нибудь есть хороший пример, как провести модульное тестирование приложения с ним? Я успешно использую его для модульного тестирования библиотеки классов silverlight.

Любые указатели и ссылки будут с благодарностью.

Спасибо, Нат

Ответы [ 4 ]

8 голосов
/ 22 ноября 2008

Я написал пару постов в блоге об основах модульного тестирования Silverlight. Первый рассказывает о том, как тестировать асинхронный код с помощью асинхронного атрибута, а также о некоторых более продвинутых функциях инфраструктуры. Сообщение можно найти на http://jonas.follesoe.no/UnitTestingAsynchronousSilverlightCode.aspx

Второй пост посвящен организации ваших тестов с использованием атрибута Tag. Это позволяет вам выполнять тесты модулей / интеграции / производительности / пользовательского интерфейса в одном и том же наборе тестов, но одновременно выполнять только одну конкретную категорию. Сообщение в блоге можно найти на http://jonas.follesoe.no/EfficientTestingInSilverlight2UsingTags.aspx

4 голосов
/ 21 ноября 2008

Ната, Silverlight Control Toolkit использует его. Почему бы не взглянуть на там юнит-тесты?

http://www.codeplex.com/silverlight

2 голосов
/ 14 мая 2013

Здесь - мое конкретное руководство по модульному тестированию в Silverlight 5 . Это поможет вам разобраться во всех моментах, если вы не знаете, с чего начать. Это руководство о тестировании внутри вашего проекта. Вам не понадобится 2-й проект 3-го проекта Silverlight для модульного тестирования.

0.) Закройте проект Silverlight.

1.) Загрузите набор инструментов Silverlight 5 здесь и установите его.

2.) Откройте проводник Windows, перейдите в C: и найдите следующие два файла:

Microsoft.Silverlight.Testing.dll

Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll

Если вы их не найдете, значит что-то не так.

3.) Зарегистрируйте эти две библиотеки DLL в GAC. Для этого сделайте следующее:

Откройте консоль Visual Studio как Администратор . Скопируйте каждое из утверждений и выполните их в консоли:

gacutil / i "C: \ Program Files \ Microsoft SDK \ Silverlight \ v5.0 \ Toolkit \ dec11 \ Testing \ Microsoft.Silverlight.Testing.dll"

gacutil / i "C: \ Program Files \ Microsoft SDK \ Silverlight \ v5.0 \ Toolkit \ dec11 \ Testing \ Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"

Имейте в виду, что пути к DLL могут отличаться на вашем компьютере. Просто введите правильный путь для вашей машины.

4. Откройте ваш проект Silverlight и добавьте две библиотеки DLL сверху как ссылку на проект Silverlight. Не для вашего веб-проекта.

5. Добавьте следующий класс в ваш проект. Неважно, куда вы положили. У меня есть дополнительная папка для моих тестов, но это не имеет значения.

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Test
{
[TestClass]
public class Test_Svc_Login 
{
    [TestMethod]
    public void Always_True()
    {
        Assert.IsTrue(true);
    }

    [TestMethod]
    public void Always_False()
    {
        Assert.IsTrue(false);
    }

    [TestMethod]
    public void Even_MoreAlways_False()
    {
        Assert.IsTrue(false);
    }
}

}

6. Нажмите F6, попробуйте скомпилировать. На этом все должно быть хорошо.

7. Найдите файл "App.xaml.cs" в вашем проекте. Внутри этого файла вы найдете следующее утверждение. Конечно, "новый Gui.MainPage ();" будет отличаться в вашем проекте. Просто найдите RootVisual.

 this.RootVisual = new Gui.MainPage();

Вы заменяете этот оператор следующим блоком кода.

#if DEBUG
            if (System.Diagnostics.Debugger.IsAttached)
            {
                //You hit F5 ONLY
                this.RootVisual = new Gui.MainPage();
            }
            else
            {
                //You hit CTRL + F5 
                RunUnitTests();
            }
#else
            //You are in Release Mode. You hit whatever you want.
            this.RootVisual = new Gui.MainPage();
#endif 

Теперь вы добавляете следующую подпрограмму в ваш класс App.xaml.cs:

 private void RunUnitTests()
        {

#if DEBUG
            //You hit CTRL + F5 
            var settings = new UnitTestSettings();
            settings.TestHarness = new UnitTestHarness();
            settings.StartRunImmediately = true;
            settings.TestAssemblies.Add(Assembly.GetExecutingAssembly());
            this.RootVisual = UnitTestSystem.CreateTestPage(settings); 
#endif
        }

8. Нажмите F6, чтобы проверить, все ли в порядке.

9. Нажмите F5, чтобы увидеть, можете ли вы все еще нормально отлаживаться. Нажмите Ctrl + F5, чтобы запустить модульный тест.

10. Готово! Теперь вы можете тестировать модуль в Silverlight 5.

Имейте в виду, что две библиотеки DLL из набора инструментов все еще находятся в «экспериментальном» режиме. Официальной поддержки нет. Также имейте в виду, что это примерно то же самое, что запуск тестов внутри вашего проекта. Теперь вы можете даже запустить этот тест на клиентском компьютере в режиме выпуска. Если вы хотите сделать это, вы должны изменить #if заявления DEBUG, но я думаю, вы понимаете, о чем идет речь.

Конечно, вы можете изменить этот подход для модульного тестирования в дополнительном проекте.

Счастливое кодирование.

СОВЕТ: Если после регистрации двух DLL у вас возникли проблемы с System.Core.dll, просто используйте gacutil для регистрации System.Core.dll снова. Как это:

gacutil / i "C: \ Program Files \ Справочные сборки \ Microsoft \ Framework \ Silverlight \ v5.0 \ System.Core.dll"

1 голос
/ 08 мая 2009

Вам также следует попробовать использовать SilverUnit для реального модульного тестирования Silverlight , это действительно простой в использовании каркас, который также защищает вас от сложностей обработки событий Silverlight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...