1

我正在尝试使用 UriBuilder 生成我的 baseurl。我在我的 TestUtil 类中创建了一个通用的“GetRequestUrl”。如何使用此方法在运行时获取我的测试类的名称并附加到字符串 serviceAPI

//这是我的TestUtil类中的GetRequestUrl方法

public class TestUtil
{
        public string GetRequestUrl(string serviceName)
        {
            string serviceAPI = this.GetType().BaseType.Name;
            var requestUrl = new UriBuilder();
            requestUrl.Scheme = "http";
            requestUrl.Host = "svc-" + serviceName + "." + 
       ConfigurationManager.AppSettings["TestEnvironment"] + "-example.com/api/";
            requestUrl.Path = serviceAPI;
            Uri uri = requestUrl.Uri;

            return uri.ToString();

        }
}

//这是我的测试类,我希望在运行时将类名“TestClass”附加到 serviceAPI 字符串,但我得到的是 TestUtil。我试过跟随..

this.GetType().Name;

this.GetType().BaseType.Name;

MethodBase.GetCurrentMethod().DeclaringType.Name;

public class TestClass
{
TestUtil util = new TestUtil();
    [Test]
    public void Method1()
{
     string fullUrl = util.GetRequestUrl("APIServiceName");

}

}
4

1 回答 1

0

您需要将一个类作为参数传递给 GetRequestUrl,或者您要附加的字符串。字符串更好,因为它可以防止您将来需要更改代码以采用不同的做法。要按照您想要的方式进行操作,就是使用反射,如果您可以这样做,则应避免使用反射:

公共类TestUtil
{
    公共字符串 GetRequestUrl(字符串 testType,字符串 serviceName)
    {
        字符串 serviceAPI = testType;
        var requestUrl = new UriBuilder();
        requestUrl.Scheme = "http";
        requestUrl.Host = "svc-" + serviceName + "."
        + ConfigurationManager.AppSettings["TestEnvironment"] + "-example.com/api/";
        requestUrl.Path = serviceAPI;
        uri uri = requestUrl.Uri;

        返回 uri.ToString();
    }
}

公共类TestClass
{
    TestUtil util = new TestUtil();
    [测试]
    公共无效方法1()
    {
        string fullUrl = util.GetRequestUrl(this.GetType().ToString(), "APIServiceName");
    }
}

另一种选择是在构造函数中传递它并将其存储为私有变量,该变量集中数据,以便您只传递一次。使用接口比使用类更可取:

使用接口方法:

// 一个空的接口就可以了。
// 然后 TestUtil 将需要一个 ServiceAPI 来使用它来创建它
// 构造函数作为保证。
公共接口 IServiceAPI { }  

使用 System.Reflection;
公共类TestUtil
{
    私人服务;
    
    // TestUtil 需要一个 ServiceAPI 类。
    公共 TestUtil(IServiceAPI 服务)
    {
        _service = 服务;
    }
    
    公共字符串 GetRequestUrl(字符串服务名称)
    {
        字符串 serviceAPI = _service.GetType().Name; // 获取类名。
        var requestUrl = new UriBuilder();
        requestUrl.Scheme = "http";
        requestUrl.Host = "svc-" + serviceName + "."
        + ConfigurationManager.AppSettings["TestEnvironment"]
        +“-example.com/api/”;
        requestUrl.Path = serviceAPI;
        uri uri = requestUrl.Uri;

        返回 uri.ToString();
    }
}
// 在 TestClass 上实现 IServiceAPI 接口。
公共类TestClass:IServiceAPI
{
    // 在这里使用“this”传入TestClass。
    TestUtil util = new TestUtil(this);
    
    [测试]
    公共无效方法1()
    {
        string fullUrl = util.GetRequestUrl("APIServiceName");
    }
}
于 2020-06-20T08:20:22.010 回答