单元测试ASP.NET,在web api中打开一个文件

时间:2017-11-16 05:00:23

标签: c# asp.net unit-testing

我有一个带有这样功能的Web api:

    [HttpPost]
    public IHttpActionResult PostData([FromBody] JObject new_data)
    {
        //Some code here
        var fullPath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/data.txt");

        System.IO.File.WriteAllText(fullPath, new_data.ToString());

        return Ok();
    }

然后我正在测试这个api:

    [TestMethod]
    public void TestPostData()
    {
        // Arrange
        JObject data = getSampleData();
        var controller = new MyController();
        //Act
        IHttpActionResult result = controller.PostData(data);

        //Assert
        Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult<JObject>));      
    }

我在下面的行中收到错误:

    System.IO.File.WriteAllText(fullPath, new_data.ToString());

错误说: 消息:测试方法NetWorth.Tests.UnitTest1.TestPostData抛出异常: System.ArgumentNullException:值不能为null。 参数名称:路径

有人可以帮忙吗?我是ASP和c#以及单元测试的新手!任何建议都会有所帮助。

我应该说api在我运行时效果很好,这个问题就在测试时。

1 个答案:

答案 0 :(得分:0)

进行测试,使用文件的完整路径而不是var fullPath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/data.txt"); 例如,让方法采用一个文件路径,如果没有传递,将等于你的常量