我有一个WCF服务,我操作数据库表。我如何传递一些参数
该服务使用MockDatabase
进行测试,而非生产Database
。
服务中的IDatabase接口:
public interface IDatabase
{
void addNewProduct(Product product);
}
实施IDatabase的MockDatabase:
public class MockDatabase : IDatabase
{
public void addNewProduct(Product product)
{
//some impl
}
}
客户获取服务实例:
AuthenticationClient authorise = new AuthenticationClient();
答案 0 :(得分:1)
抱歉,您的问题不完全清楚,但如下所示。
如果你指的是单元测试并且没有使用任何模拟对象框架,就像这样......
//production code/project
public interface IDatabase {
void addNewProduct(Product product);
}
public class SystemUnderTest {
private IDatabase _database;
public SystemUnderTest(IDatabase database) {
_database = database;
}
public void DoSomthing(Product product) {
_database.addNewProduct(product);
}
}
//Unit Test project
public class MockDatabase : IDatabase {
public void addNewProduct(Product product)
{ //mock implementation}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
//Arrange
var mock = new MockDatabase();
var fakeProduct = new Product();
mock.addNewProduct(fakeProduct );
var sut = new SystemUnderTest(mock);
//Act
sut.DoSomthing(product);
//Assert
//Whatever you like to assert
}
}
我在这里使用构造函数注入,但您也可以使用属性注入。除非我有更多信息,否则很难准确说出来。
答案 1 :(得分:0)
我建议只在单元测试项目中调用mock数据库。我建议不要为每个服务调用添加一个if语句,以查看调用是否要使用实时数据库或模拟数据库。
答案 2 :(得分:0)
我最终为我的所有数据库操作IDatabase
创建了一个界面,并创建了一个实现Database
的{{1}}类。
然后我创建了一个IDatabase
类,它也实现了DatabaseMock
,但是已经改变了
在测试期间应该运行其方法体。
使用IDatabase
和Unity
我能够配置主项目的Moq
和测试项目的web.config
以在运行时解析绑定:< / p>
app.config
在<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="Ecommerce_WCF"/>
<assembly name="Ecommerce_WCF_Test"/>
<alias alias="IDatabase" type="Ecommerce_WCF.IDatabase, Ecommerce_WCF" />
<alias alias="Database" type="Ecommerce_WCF.Database, Ecommerce_WCF" />
<alias alias="DatabaseMock" type="Ecommerce_WCF.DatabaseMock, Ecommerce_WCF" />
<container>
<register type="IDatabase" mapTo="Database" />
<!--<register type="IDatabase" mapTo="DatabaseMock" />-->
</container>
</unity>
标记内,取决于评论/取消评论container
它根据您可以更改的真实类或模拟来解析绑定
根据您是否正在运行/测试
每当我的应用程序中使用register type
操作时,我都会使用代码:
Database