Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用不同的实体模型设置使单元测试运行两次_C#_Unit Testing_Vs Unit Testing Framework_Mockups - Fatal编程技术网

C# 如何使用不同的实体模型设置使单元测试运行两次

C# 如何使用不同的实体模型设置使单元测试运行两次,c#,unit-testing,vs-unit-testing-framework,mockups,C#,Unit Testing,Vs Unit Testing Framework,Mockups,我有一个支持多种部署模式的项目:InMem、OnPremise、Cloud。 此外,每个项目都有一些小的服务,比如可以连接到WCF或API的TimeDistance 在unitTestMockup中,我可以说出我想要使用哪一个: Service.TimeDistance = new WCFTimeDistance() / new APITimeDistance(). 到目前为止,我只有WCFTimeDistance,但现在我们处于转换模式,可以移动到APITimeDistance,但同时我希望

我有一个支持多种部署模式的项目:InMem、OnPremise、Cloud。 此外,每个项目都有一些小的服务,比如可以连接到WCF或API的TimeDistance

在unitTestMockup中,我可以说出我想要使用哪一个:

Service.TimeDistance = new WCFTimeDistance() / new APITimeDistance().
到目前为止,我只有WCFTimeDistance,但现在我们处于转换模式,可以移动到APITimeDistance,但同时我希望在运行测试时运行两次,一次使用WCF,一次使用API

做这件事的好方法是什么

I use C# 4.5
Microsoft.VisualStudio.QualityTools.UnitTestFramework as framework for unitTests
所需工作流的一个简单示例如下:

1)Mockup: Service.TimeDistance = new WCFTimeDistance();
2)UnitTest: CheckDistanceBetweenTwoLocationsTest()
{
Service.TimeDistance.CalculateDistance(Location1, Location2) // WCFTimeDistance
}
3)Mockup: Service.TimeDistance = new APITimeDistance();
UnitTest: CheckDistanceBetweenTwoLocationsTest()
{
4)Service.TimeDistance.CalculateDistance(Location1, Location2) //    APITimeDistance
}

创建两个单元测试。还可以考虑使用抽象而不是静态类。这将使模拟和测试更容易

这适用于您当前的设置

[TestClass]
公共类时间距离测试{
//将这些更改为所需的类型
物体位置1;
物体位置2;
双重预期;
[测试初始化]
公共void Init(){
//…设置两个位置和期望值
位置1=/。。。
位置2=/。。。
预期=/…距离。
}
[测试方法]
公共无效检查\u两个\u位置之间的距离\u使用\u WCF(){
//安排
var sut=新的WCFTimeDistance();
//表演
var实际值=sut.CalculatedInstance(位置1、位置2);
//断言
//…证明测试通过或失败的断言
断言.AreEqual(预期、实际);
}
[测试方法]
公共无效检查\u两个\u位置之间的距离\u使用\u API(){
//安排
var sut=新的apitimedance();
//表演
var实际值=sut.CalculatedInstance(位置1、位置2);
//断言
//…证明测试通过或失败的断言
断言.AreEqual(预期、实际);
}
}
理想情况下,您希望抽象服务。假设

public interface ITimeDistance {
    double CalculateDistance(Location location1, Location location2);
}
您的服务将使用抽象而不是具体化

public class Service {
    ITimeDistance timeDistance
    public Service(ITimeDistance timeDistance) {
        this.timeDistance = timeDistance;
    }

    public ITimeDistance TimeDistance { get { return timeDistance; } }
}

因此,现在在单元测试中,您可以交换时间距离服务的不同实现。

对不起-什么语言,什么单元测试框架?另外,你能提供一份详细的报告吗?不过,这个问题很好@AndreiDutu创建了两个单元测试。还可以考虑使用抽象而不是静态类。这将使模拟和测试更容易这正是服务的抽象方式。我避免重复测试,因为我已经有了约110个单元测试,而且重复的代码太多了。我现在就是这样做的,我创建了一个新的枚举:WCF,API,我首先运行WCF的单元测试,然后运行API的单元测试。我想有一种方法我可以做到这一切automatically@AndreiDutu然后看看单元测试框架,如NUnit或xUnit,它们提供了这样的功能,例如,请参见此处: