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