Получение Microsoft Test Framework для использования Spring.Net для создания тестовых классов - PullRequest
1 голос
/ 13 февраля 2011

У меня есть проект, использующий .Net 4.0, VS 2010 и Spring 1.3.До и после каждого из моих интеграционных тестов я хочу иметь возможность настроить и очистить некоторые данные для теста.Я думал об использовании пользовательских атрибутов для этого.

[TestClass]
public class UnitTest1
{
    [TestMethod]
    [PreTestSqlExecute(SqlScript="SetUpDataForMethod1.sql")]
    public virtual void TestMethod1()
   {
   .

Для этого я создал пользовательский атрибут и перехватчик метода Around

public class PreTestSqlExecuteAdvice : IMethodInterceptor
{
    public object Invoke(IMethodInvocation invocation)
    {
    .

По сути, теперь проблема заключается в том, как заставить среду тестирования в Microsoft использовать Springсоздать класс «UnitTest1» вместо непосредственного создания конкретного класса.Например, я могу использовать фиктивное консольное приложение с соответствующей конфигурацией, чтобы сделать что-то вроде этого

    static void Main(string[] args)
    {
        IApplicationContext ctx = ContextRegistry.GetContext();
        var ut = (UnitTest1)ctx["mySqlTest"];
        ut.TestMethod1();

Это прекрасно работает.Но когда я запускаю тесты напрямую, используя Visual Studio и нажимаю, например, «Запустить все тесты в решении», он не вызывает перехватчик и не выполняет код «до» и «после», а просто переходит непосредственно к методу теста.

Я попытался использовать AttributeAutoProxyCreator в конфигурации, как показано ниже

<object type="Spring.Aop.Framework.AutoProxy.AttributeAutoProxyCreator, Spring.Aop">
  <property name="AttributeTypes" value="SpringTests.ClassInstanceAttribute"/>
  <!-- Interceptor names can be either of the type IAdvice, IAdvisor, or IAdvisors -->
  <property name="InterceptorNames" value="aroundAdvisor"/>
</object>

с соответствующим атрибутом класса

[TestClass]
[ClassInstance]
public class UnitTest1
{

или наследовать от AbstractDependencyInjectionSpringContextTests

public class UnitTest1 : AbstractDependencyInjectionSpringContextTests

Но ни один из них, кажется, не работает.Мой метод перехватчик не вызывается.Итак, как мне заставить тестовую среду Microsoft в Visual Studio использовать либо Spring-контекст для создания тестовых классов.Или, альтернативно, заставить Spring перехватывать конкретные конструкции этих тестовых классов и вместо этого вводить класс Proxy.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 26 сентября 2011

Нашел собственное решение, как подробно описано здесь - http://www.chaitanyaonline.net/2011/09/25/improving-integration-tests-in-net-by-using-attributes-to-execute-sql-scripts/

По сути, я наследую свои модульные тесты от "ContextBoundObjects", это позволяет мне внедрять свой собственный код и делать что-то вроде AOP. Я создал свои собственные атрибуты, чтобы можно было запускать сценарии Sql до и после обработки.

...