Bet*_*moo 3 .net c# visual-studio
我可以用自己的实现替换(或覆盖)类定义吗?
说明:
`
class foo
{
Random r=new Random();
double bar()
{
double ans=r.NextDouble();
.....// evaluate ans
return ans;
}
}
Run Code Online (Sandbox Code Playgroud)
`
有什么方法可以用另一个替换Random类的实现而不改变(或用最小的改动)原始代码文件?
编辑:
一个解决方案是继承Random类并修改它...但是这需要用继承的实例更改每个Random实例...我不想修改代码,因为我只是测试它!
编辑2:
我可以在C#中说:"这个文件中的每个随机类都是MyNamespace.Random而不是System.Random"?
编辑:正如ChaosPandion指出的那样,为了测试方法中的逻辑,最好采用双参数double bar(double input) { ... },但如果你有理由需要注入自己的random源,你可以使用以下方法之一:
您可以修改bar Func<double>以获取以下值:
double bar(Func<double> source)
{
double ans = source();
//evaluate ans
return ans;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以注入自己的实现进行测试,并在主程序中使用:
Random r = new Random();
double ans = bar(r.NextDouble);
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建自己的IRandom接口,然后围绕真实Random类实现包装并使用模拟进行测试:
interface IRandom
{
double Next();
}
public class RandomWrapper : IRandom
{
private Random r = new Random();
public double Next()
{
return this.r.NextDouble();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |