2016-06-03 4 views
2

Я использую ApprovalTests.Net. Я вижу, что могу указать различные отчеты. Я хотел бы автоматически утверждать тесты, когда я запускаю модульные тесты. Мне нужно сделать это только временно, или когда код проходит основные изменения. Это особенно полезно при создании опроса, одобренного данными, с использованием ApproachResults.ForScenario.Как автоматически утверждать тесты проверки при запуске?

Есть ли способ сделать это?

ответ

4

Создайте репортера, а не используйте IApprovalFailureReporter, реализуйте IReporterWithApprovalPower. IReporterWithApprovalPower имеет дополнительный метод, ApprovedWhenReported, где вы можете выполнить работу по утверждению теста.

Вот пример репортер, который будет автоматически копировать полученный файл в утвержденном файл:

public class AutoApprover : IReporterWithApprovalPower 
{ 
    public static readonly AutoApprover INSTANCE = new AutoApprover(); 

    private string approved; 
    private string received; 

    public void Report(string approved, string received) 
    { 
     this.approved = approved; 
     this.received = received; 
     Trace.WriteLine(string.Format(@"Will auto-copy ""{0}"" to ""{1}""", received, approved)); 
    } 

    public bool ApprovedWhenReported() 
    { 
     if (!File.Exists(this.received)) return false; 
     File.Delete(this.approved); 
     if (File.Exists(this.approved)) return false; 
     File.Copy(this.received, this.approved); 
     if (!File.Exists(this.approved)) return false; 

     return true; 
    } 
} 

Вы можете использовать его в тестовом классе или методе, как вы определите утверждающий:

[UseReporter(typeof(AutoApprover))] 
0

Это поражает меня как очень плохую идею. Если вы используете ClipboardReporter или AllFailingTestsClipboardReporter, вы можете утвердить их с помощью одной пасты в командной строке, но автоматическое одобрение без проверки или понимания того, почему они изменились, похоже, превзошло все преимущества тестирования.

Зачем вам это нужно?

+2

Вы бы никогда не захотели сделать это, не понимая, что происходит. Но скажем, вы сделали кучу рефакторинга, и модульные тесты переместились. У вас их тысячи. Вы знаете, что логика модульных тестов не изменилась. Они просто в разных именах классов и пространства имен. Вместо того, чтобы проходить через 1000 файлов и выяснять, куда они идут, вы можете просто удалить все файлы assert.txt и восстановить их. Если инструменты рефакторинга, которые перемещают методы и классы вокруг, понимают об этих дополнительных файлах, это не нужно делать. – zumalifeguard

+1

Я использую этот тип репортера, чтобы все одобрить. Мой рабочий процесс включает в себя изменение производственного кода и выполнение тестов, автоматически одобряющее все. Затем, прежде чем я завершу проверку, проверьте diff в коде AND. Approved files с помощью 'git diff HEAD --ignore-space-at-eol --ignore-space-change' (с псевдонимом для краткости). Довольно быстро, когда у вас есть аккумулятор одобренных файлов. –

Смежные вопросы