Java 使用ApprovalTest验证多个图像

Java 使用ApprovalTest验证多个图像,java,approval-tests,Java,Approval Tests,我有一个方法,可以生成一些图像(1.jpg,2.jpg…)并将它们写入文件系统。我想用ApprovalTest验证此方法的结果。问题在于批准。验证(图像)将收到和批准的文件命名为测试方法的名称。因此,我无法通过一次测试验证多个图像 如何在一个测试中验证多个图像?您可以使用NamerFactory更改附加到文件末尾的信息。下一次测试 [TestFixture] class Program { [Test] [UseReporter(typeof(WinMergeReporter))

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


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

您可以使用
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)
与前面一样,但只需更改
附加信息,如示例所示

注意:我不太推荐在一个测试中验证两个图像,因为如果一个验证失败,则不会执行下一个验证。而且,审批测试无法在一个步骤中连接图像并验证它们,至少如果您自己这样做的话

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

public static void asMachineSpecificTest(Function0<String> environmentLabeller)
{
    additionalInformation = environmentLabeller.call();
}
public static void asmachinespecificationtest(Function0环境标签器)
{
additionalInformation=environmentLabeller.call();
}

并提供适当的函数,返回图像的名称

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");
  }
}

我忘了提到我正在使用Java。这也适用于Java吗?我想是的,API是一样的。在Java版本org.approvaltests.namer.NamerFactory中,其他信息是私有的,没有setter。好的,我会自己调查,谢谢回复。您使用什么版本的批准测试?我使用的是0.12
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");
  }
}