如何修改BaseTest Setup方法中调用类的属性值?(C#、NUnit等)
Hey Mike, 针对你提到的要在测试用例里修改TokenRequest类的PostMe属性(替代默认值)的需求,结合你用到的C#、NUnit、Selenium、VS2017、RestSharp这些技术栈,我整理了几个实用的解决方案,你可以根据自己的测试结构来选择:
方案1:直接在测试方法中注入自定义TokenRequest实例
如果你的TokenGenerate方法目前是内部创建TokenRequest,可以先给它加一个可选参数,让测试用例能传入自定义实例,同时不影响原有默认逻辑:
// 重构TokenGenerate方法,支持传入自定义TokenRequest public string TokenGenerate(TokenRequest customRequest = null) { // 有传入则用自定义实例,否则用默认构造的实例 var tokenRequest = customRequest ?? new TokenRequest(); // 原有Token生成逻辑... var client = new RestClient("your-token-api-url"); var request = new RestRequest(Method.POST); request.AddJsonBody(tokenRequest); var response = client.Execute<TokenResponse>(request); return response.Data.Token; }
然后在测试用例里直接创建并修改属性后传入:
[Test] public void TokenTestWithCustomPostMe() { // 创建自定义TokenRequest实例,修改PostMe属性 var customTokenRequest = new TokenRequest { PostMe = "我的自定义PostMe值", // 其他需要修改的属性也可以在这里设置 }; // 调用带参数的TokenGenerate方法 var token = TokenGenerate(customTokenRequest); // 后续测试断言逻辑... Assert.IsNotNull(token); }
方案2:在测试类的SetUp中针对性修改属性
如果TokenRequest是BaseTest或者测试类中的可访问成员(比如protected字段),可以在测试类的[SetUp]方法里修改,若只想给特定测试方法改值,直接在方法内覆盖即可:
public class TokenTests : BaseTest { // 假设BaseTest中定义了protected的TokenRequest实例 protected TokenRequest _testTokenRequest; [SetUp] public new void TestSetup() { // 先执行BaseTest的前置逻辑 base.Setup(); // 给当前测试类的所有用例设置统一的自定义PostMe值 _testTokenRequest.PostMe = "测试类全局自定义值"; } [Test] public void SpecificTestWithUniquePostMe() { // 仅给这个测试方法设置专属的PostMe值,覆盖SetUp中的全局值 _testTokenRequest.PostMe = "仅该用例生效的自定义值"; var token = TokenGenerate(); // 测试逻辑... } [Test] public void TestWithDefaultPostMe() { // 这里会使用BaseTest中的默认值,或者SetUp里的全局值 var token = TokenGenerate(); // 测试逻辑... } }
方案3:用NUnit的TestCase批量传递不同属性值
如果需要针对多个不同的PostMe值跑测试,可以直接用NUnit的[TestCase]特性来传递参数,省得重复写测试方法:
// 批量测试不同的PostMe值 [TestCase("自定义值1")] [TestCase("自定义值2")] [TestCase("边界测试值")] public void TokenTestWithMultiplePostMeValues(string customPostMe) { var tokenRequest = new TokenRequest { PostMe = customPostMe }; var token = TokenGenerate(tokenRequest); // 断言Token生成成功 Assert.That(token, Is.Not.Empty); }
内容的提问来源于stack exchange,提问作者Mike ASP
相关产品推荐
相关产品推荐

