Как написать модульные тесты, используя Unit Driven для разработки приложений для Windows Phone 7?
Я искал платформу Unit Test, которая способна тестировать асинхронные функциональные вызовы при разработке приложений для Windows Phone 7. Да, единое целое было тем, что появилось у меня на глазах. Однако эта среда не была дружественной для разработчиков, как NUnit (которая, к сожалению, не может тестировать асинхронные методы). В интернете люди используют UD для модульного тестирования. Может кто-нибудь заглянуть и дать совет?
Мои конкретные вопросы:
1) Где я могу включить следующий код инициализации?
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new UnitDriven.TestEngine(Assembly.GetExecutingAssembly());
}
2) Как мне написать контрольные примеры для UD? С помощью NUnit я могу писать тестовые примеры вместе с моим приложением, а NUnit загружает мои dll и выполняет тесты. Я пытался вставить в свое приложение, но Visual Studio 2010 Express всегда жалуются, что не может найти символ GetContext ()
UnitTestContext context = GetContext();
3) Было три dll с UD. UnitDrivenLight, UnitDrivenPhone, UnitDrivenNet... Итак, каковы роли UnitDrivenLight и UnitDrivenPhone? Очень запутанно в данный момент.
Спасибо
Симо
2 ответа
Я сам не использовал UnitDriven, но у меня был успех с тестовой средой, которая поставляется с Windows Phone Toolkit (который поддерживает асинхронные тесты).
На самом деле, я создал модифицированную версию, которая добавляет поддержку командной строки. Это в NuGet, как wp7-ci
(пользовательская задача MSBuild усложняет ручную установку).
В конце концов, с подсказками Сзалая, я перешел на использование тестового фреймворка Microsoft для асинхронных тестов, вот пример тестового класса:
namespace TestApp
{
using System.Threading;
using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <summary>
/// An example test class
/// </summary>
[TestClass]
public class ExampleTestClass : SilverlightTest
{
/// <summary>
/// Sample asynchronous test
/// </summary>
[TestMethod, Tag("Asynchronous Test"), Asynchronous]
public void SampleAsynchronousTest()
{
ThreadPool.QueueUserWorkItem(o =>
{
for (int j = 0; j < 10000; j++){}
CheckResult(10);
});
}
/// <summary>
/// Check result
/// </summary>
/// <param name="variable">result</param>
private void CheckResult(int variable)
{
Assert.IsTrue(variable == 10);
EnqueueTestComplete();
}
}
}