就像大多数Web应用程序一样,我的Web应用程序具有静态资源,这些资源必须是部署的一部分,否则用户会从服务器收到404响应。我的想法是使用单元测试来验证两件事:1.资源存在,并且2.内容未修改。我尝试了以下代码,但是(我认为)期望文件存在于单元测试项目中。
解决方案结构: Web应用项目 -... - 上市 -文件。* -其他文件。* -web.config
WebApplicationProject.Tests -AssetTests.cs
我要解决所有这些错误吗,这是否不应该作为单元测试的一部分,也不应该是CI构建过程中的其他步态(Azure DevOps),还是我错过了一些显而易见的东西?我可能会问错问题并以错误的方式进行处理,因为我知道我不是第一个想要做这样的事情的人。
我已经阅读了有关文件测试的其他文章,但是他们都使用测试文件来驱动数据以某种消耗文件的方法或生成文件进行比较的过程输入。我不想做任何一件事情。
我还进行了一些设置,使文件成为嵌入式资源,并始终与项目一起部署,但是单元测试项目仍然无法按照我的方式访问文件。
[TestClass]
public class AssetTests
{
[TestMethod]
[DeploymentItem(@".\files\file.*")]
public void AwardLetters()
{
string path = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "file.*");// gets the working path for the testing dll, no files exist here.
Assert.IsTrue(File.Exists("file.*"), "FAIL: file {0} not found", "file.*");// nothing I have tried has access to the projects static resources
}
}
所有结果均以到目前为止未找到的文件结尾。
我确实尝试使用以下方法手动加载参考: Assembly a = Assembly.LoadFrom(“ WebApplicationProject”); //还使用了WebApplicationProject.dll 这找不到参考。是的,引用属性副本本地设置为true。
我愿意接受所有建议,但是如果您建议我有文件的两个副本,请充分说明为什么这样做是可取的。
答案 0 :(得分:0)
好的,这是我的MVP。我会暂时打开此窗口,尽管希望有人能提供更好的解决方案,但访问这样的资源不会有这么大的困难,我觉得应该有一种方法可以访问应用程序目录而不必将文件嵌入其中。程序集只是将其传递给测试方法。
[TestMethod]
public void FileExists()
{
Assembly a = Assembly.LoadFrom(@"..\..\..\WebApplicationProject\bin\WebApplicationProject.dll");
string t = string.Join("", a.GetManifestResourceNames());
Assert.IsTrue(t.Contains("file.*"));
}
现在我有了文件,我还可以创建一个测试来测试文件的内容以验证其内容。
我仍然认为这是鸭子磁带,一点也不优雅。因此,请分享您对我的解决方案的回答和批评。