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

如何通过Typemock Isolator让每个Student拥有3个不同Grade的假Course

解决每个Student的假Course实例拥有不同Grade的方案

要实现每个Student的3个假Course拥有不同Grade,核心思路是在伪造Course实例时动态为每个实例分配唯一的Grade值,而不是给所有伪造实例设置固定值。下面用Typemock Isolator给出具体实现方案:

1. 核心实现逻辑

我们可以借助Isolate.Fake.AllInstances的回调能力,在每个假Course实例创建时,动态生成随机(或递增)的Grade,同时替换CourseMethod的输出行为,让它打印当前实例的伪造Grade。

完整单元测试代码示例

[TestClass]
public class StudentTests
{
    [TestMethod]
    public void StudentTestMethod_FakedCourses_HaveUniqueGradesPerInstance()
    {
        // 初始化随机数生成器,用于生成不同Grade
        var gradeRandomizer = new Random();

        // 伪造所有Course实例,自定义每个实例的属性和方法行为
        Isolate.Fake.AllInstances<Course>(fakeConfig =>
        {
            // 拦截Grade属性的访问,每次返回新的随机值
            fakeConfig.WhenCalled(course => course.Grade)
                      .WillReturn(() => gradeRandomizer.Next(0, 100));

            // 替换CourseMethod的执行逻辑,输出当前实例的伪造Grade
            fakeConfig.WhenCalled(course => course.CourseMethod())
                      .DoInstead(context =>
                      {
                          var targetCourse = (Course)context.Instance;
                          Console.WriteLine($"Faked = {targetCourse.Grade}");
                      });
        });

        // 创建Student实例,此时它的3个Course都是伪造且Grade不同的
        var testStudent = new Student();
        testStudent.StudentTestMethod();

        // 可选:添加断言验证3个Course的Grade确实不同
        var courseGrades = testStudent.courses.Select(c => c.Grade).ToList();
        Assert.AreEqual(3, courseGrades.Distinct().Count());
    }
}

2. 关键细节说明

  • 动态生成Grade:通过WillReturn(() => gradeRandomizer.Next(0, 100)),让每个假Course实例的Grade属性在被访问时返回一个全新的随机值,确保每个实例的Grade唯一。
  • 实例级方法替换:在DoInstead中通过context.Instance获取当前调用方法的Course实例,这样输出的Grade就是该实例独有的值,不会出现所有实例输出相同内容的问题。
  • 可选的规律化Grade:如果不想用随机数,也可以用计数器生成递增的Grade,比如:
    int gradeCounter = 0;
    fakeConfig.WhenCalled(course => course.Grade)
              .WillReturn(() => gradeCounter += 15);
    
    这样每个新创建的Course实例Grade会依次增加15,同样能保证唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:11