3

我有一种方法可以生成一些图像(1.jpg、2.jpg...),并将它们写入文件系统。我想用 ApprovalTest 验证这个方法的结果。问题在于Approvals.verify(image)将接收和批准的文件命名为测试方法的名称。因此,我无法通过一次测试验证多个图像。

如何在一次测试中验证多个图像?

4

2 回答 2

5

您可以使用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已经在 endfirstImage和之前创建了两个文件。secondImage为了清楚起见,请参阅屏幕截图:

在此处输入图像描述

我的对象是字符串,但是对于您的图像来说都是一样的。您会像以前一样调用,但只是像示例中一样进行Approvals.Verify(image)更改。AdditionalInformation

注意:我不太建议在一次测试中验证两个图像,因为如果一个验证将失败 - 将不会执行下一个验证。并且 Approval Tests 无法在一个步骤中连接图像并验证它们,至少如果您自己这样做的话。

编辑:对于 Java 尝试使用,位于NamerFactory

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

并提供适当的功能,这将返回您的图像名称

于 2013-01-06T10:23:39.850 回答
2

Ilya 的回答是正确的,但在 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");
  }
}

附言。我会把它添加到下一个版本中,所以它只是

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");
  }
}
于 2013-01-22T18:43:51.680 回答