You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON值作为参数传入NUnit数据驱动测试方法?

解决NUnit数据驱动测试中JSON参数的类型转换错误

问题原因

你把url、username、password声明成了JToken?类型,但调用.Value<string>()后得到的是string类型,类型不匹配导致了转换错误。

修复方案

1. 快速修正编译错误

把变量类型从JToken?改为string?,同时加上空值检查避免空引用异常:

public class TestData: BasePage 
{ 
    static JObject? data = ReadJson(@"jsconfig1.json");  
    static string? url = data?.SelectToken("url")?.Value<string>(); 
    static string? username = data?.SelectToken("username")?.Value<string>(); 
    static string? password = data?.SelectToken("password")?.Value<string>(); 

    public void Login_Method()
    {
        if (url == null) throw new InvalidOperationException("未从JSON文件加载到URL");
        
        driver.Url = url;
        driver.FindElement(By.Id("username")).SendKeys(username);
        driver.FindElement(By.Id("password")).SendKeys(password);
        driver.FindElement(By.Id("login")).Click();

        driver.Close();
    }
}

2. 优化为NUnit标准数据驱动模式

如果要贴合NUnit数据驱动测试的规范,推荐使用TestCaseSource加载JSON数据,方便后续扩展多组测试用例:

public class TestData: BasePage 
{
    // 加载JSON测试数据的方法
    private static IEnumerable<TestCaseData> GetLoginTestData()
    {
        var data = ReadJson(@"jsconfig1.json");
        if (data == null) yield break;

        string? url = data.SelectToken("url")?.Value<string>();
        string? username = data.SelectToken("username")?.Value<string>();
        string? password = data.SelectToken("password")?.Value<string>();

        yield return new TestCaseData(url, username, password);
        
        // 如果JSON里有多组测试数据(数组格式),可遍历返回:
        // var testCases = data.SelectToken("loginCases") as JArray;
        // if (testCases != null)
        // {
        //     foreach (var caseItem in testCases)
        //     {
        //         yield return new TestCaseData(
        //             caseItem.SelectToken("url")?.Value<string>(),
        //             caseItem.SelectToken("username")?.Value<string>(),
        //             caseItem.SelectToken("password")?.Value<string>()
        //         );
        //     }
        // }
    }

    [Test, TestCaseSource(nameof(GetLoginTestData))]
    public void Login_Method(string? url, string? username, string? password)
    {
        if (url == null) throw new InvalidOperationException("未从JSON文件加载到URL");
        
        driver.Url = url;
        driver.FindElement(By.Id("username")).SendKeys(username);
        driver.FindElement(By.Id("password")).SendKeys(password);
        driver.FindElement(By.Id("login")).Click();

        driver.Close();
    }
}

注意事项

  • 确保ReadJson方法能正确读取并解析JSON文件,返回有效的JObject实例
  • 始终添加空值检查,避免出现NullReferenceException
  • 若需多组测试数据,可将JSON结构改为数组,通过遍历JArray返回多组测试用例

内容的提问来源于stack exchange,提问作者Khizar Sohail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:27:03