我有一种方法可以生成一些图像(1.jpg、2.jpg...),并将它们写入文件系统。我想用 ApprovalTest 验证这个方法的结果。问题在于Approvals.verify(image)
将接收和批准的文件命名为测试方法的名称。因此,我无法通过一次测试验证多个图像。
如何在一次测试中验证多个图像?
我有一种方法可以生成一些图像(1.jpg、2.jpg...),并将它们写入文件系统。我想用 ApprovalTest 验证这个方法的结果。问题在于Approvals.verify(image)
将接收和批准的文件命名为测试方法的名称。因此,我无法通过一次测试验证多个图像。
如何在一次测试中验证多个图像?
您可以使用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();
}
并提供适当的功能,这将返回您的图像名称
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");
}
}