2014-11-07 2 views
1

Согласно документации MSpec here, установка должна запускаться только один раз. Тем не менее, когда я отлаживаю, запуск выполняется один раз для делегата It. Вот простой пример:MSpec Назначить делегата

public class TestExample 
{ 
     Establish arrange =() => 
     { 
      a = 5; 
     }; 
     Because of =() => a = a * 2; 
     It should_be1 =() => a.ShouldEqual(10); 
     It should_be2 =() => a.ShouldBeGreaterThan(9); 
     It should_be3 =() => a.ShouldBeLessThan(90); 
     private static int a; 
} 

Должен ли он запускать один раз на делегата? Или один раз в классе?

+0

Я не могу воспроизвести код выше, но код в этом вопросе видит, что sharedContext работает дважды. http://stackoverflow.com/questions/32010702/inheritied-establish-executed-multiple-times – Andy

ответ

1

Это один раз для контекста (класса) - если только он не имеет базового класса, в этом случае базовый класс запускается сначала (рекурсивно, так же глубоко, как дерево наследования класса).

Как вы определяете, что он выполняется несколько раз?

Для чего это стоит, я не могу воспроизвести это поведение, используя MSpec 0.9.0, бегун ReSharper и точный код из вопроса. Все спецификации выполняются, и набор выполняется один раз, как и ожидалось.

Опрыскивание несколько Console.WriteLine() следующим образом:

using System; 
using Machine.Specifications; 

namespace StackOverflow_26809460 
    { 
    public class TestExample 
     { 
     static int a; 

     Establish arrange =() => 
      { 
      a = 5; 
      Console.WriteLine("Establish"); 
      }; 

     Because of =() => a = a*2; 

     It should_be1 =() => 
      { 
      a.ShouldEqual(10); 
      Console.WriteLine("should_be1"); 
      }; 

     It should_be2 =() => 
      { 
      a.ShouldBeGreaterThan(9); 
      Console.WriteLine("should_be1"); 
      }; 

     It should_be3 =() => 
      { 
      a.ShouldBeLessThan(90); 
      Console.WriteLine("should_be1"); 
      }; 
     } 
    } 

Когда я бегу, что в командной строке бегуна, я получаю:

 

Specs in StackOverflow_26809460: 

TestExample 
Establish 
should_be1 
» should be1 
should_be1 
» should be2 
should_be1 
» should be3 


Contexts: 1, Specifications: 3, Time: 0.53 seconds 

C:\Users\Tim\Projects\StackOverflow\StackOverflow_26809460\bin\Debug>

Это выглядит как вопрос бегун мне ...

+0

У меня есть точка останова, и установка выполняется несколько раз. Кроме того, если есть делегат Cleanup, который также выполняется несколько раз. – CodingYoshi

+0

Какую версию вы используете? Если вы считаете это ошибкой, сообщите об этом в GitHub вместе с версией и используемым бегуном. –

+0

@Tim Как это, что мы с Энди видим, что он работает несколько раз, а не вы? Я использую [this] (https://visualstudiogallery.msdn.microsoft.com/4abcb54b-53b5-4c44-877f-0397556c5c44), но я сомневаюсь, что это будет иметь какое-то отношение к бегуну. – CodingYoshi