Проверить несколько изображений с помощью ApprovedTest

У меня есть метод, который генерирует несколько изображений (1.jpg, 2.jpg...), записывая их в файловую систему. Я хочу проверить результаты этого метода с помощью ApprovedTest. Проблема заключается в том, что Approvals.verify(image) называет принятые и одобренные файлы по имени метода. Поэтому я не могу проверить более одного изображения с одним тестом.

Как я могу проверить несколько изображений в одном тесте?

2 ответа

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

[TestFixture]
class Program
{
 [Test]
 [UseReporter(typeof(WinMergeReporter))]
 public void Test1()
 {
 var image1 = @"firstImage.png";
 var image2 = @"secondImage.png";
 NamerFactory.AdditionalInformation = Path.GetFileNameWithoutExtension(image1);
 ApprovalTests.Approvals.Verify(image1);
 NamerFactory.AdditionalInformation = Path.GetFileNameWithoutExtension(image2);
 ApprovalTests.Approvals.Verify(image2);
 }
}

Approval Tests создал два файла с firstImage и secondImage до конца. Смотрите скриншот для ясности:

Мои объекты - это строки, но для ваших изображений все будет одинаковым. Вы бы назвали Approvals.Verify(image) по-прежнему, но просто изменили AdditionalInformation, как в примере.

Примечание.. Я бы не рекомендовал проверять два изображения в одном тесте, потому что если один из Verify завершится с ошибкой, следующие проверки не будут выполнены. И нет способа одобрить тесты для конкатенации изображений и проверки их в один шаг, по крайней мере, если вы сделаете это самостоятельно.

Изменить: для Java попробуйте использовать, расположенную в NamerFactory

public static void asMachineSpecificTest(Function0<string> environmentLabeller)
{
 additionalInformation = environmentLabeller.call();
}
</string>

и предоставить соответствующую функцию, которая вернет имена ваших изображений


Илья ответ правильный, но он немного отличается в java, поэтому я хотел опубликовать полный образец здесь:

package org.approvaltests.namer.tests;
import junit.framework.TestCase;
import org.approvaltests.Approvals;
import org.approvaltests.namer.NamerFactory;
import org.lambda.functions.Function0;
public class NamerFactoryTest extends TestCase
{
 public static class MultipleFiles implements Function0<string>
 {
 private int count = 1;
 @Override
 public String call()
 {
 return "" + (count++);
 }
 }
 public void testMultipleFiles() throws Exception
 {
 MultipleFiles f = new MultipleFiles();
 NamerFactory.asMachineSpecificTest(f);
 Approvals.verify("one");
 NamerFactory.asMachineSpecificTest(f);
 Approvals.verify("two");
 }
}
</string>

пс. Я добавлю это в следующую версию, так что это будет просто

package org.approvaltests.namer.tests;
import junit.framework.TestCase;
import org.approvaltests.Approvals;
import org.approvaltests.namer.MultipleFilesLabeller;
import org.approvaltests.namer.NamerFactory;
public class NamerFactoryTest extends TestCase
{
 public void testMultipleFiles() throws Exception
 {
 MultipleFilesLabeller labeller = NamerFactory.ApprovalResults.useMultipleFiles();
 Approvals.verify("one");
 labeller.next();
 Approvals.verify("two");
 }
}

licensed under cc by-sa 3.0 with attribution.