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
Unit testing 模拟参考参数_Unit Testing_Mocking_Moq - Fatal编程技术网

Unit testing 模拟参考参数

Unit testing 模拟参考参数,unit-testing,mocking,moq,Unit Testing,Mocking,Moq,我已在#moq讨论组上交叉发布了此信息,地址为: 嘿,伙计们 我遇到了一个问题,一个模拟参考参数,我敢肯定 必须是显而易见的,但作为一个新的框架,我就是不能工作 出去 我有以下存储库方法: public int SaveCard(int userId, CardPaymentMethodDto cardPaymentMethodDto) { int? cardId = 0; try { int result = t

我已在#moq讨论组上交叉发布了此信息,地址为:

嘿,伙计们

我遇到了一个问题,一个模拟参考参数,我敢肯定 必须是显而易见的,但作为一个新的框架,我就是不能工作 出去

我有以下存储库方法:

public int SaveCard(int userId, CardPaymentMethodDto
cardPaymentMethodDto)
{
        int? cardId = 0;
        try
        {
                int result = this.dataContext.usp_PaymentMethod_Card_Insert(userId,
                                cardPaymentMethodDto.UserAccountReference,
                                cardPaymentMethodDto.EncryptedCardNumber,
                                cardPaymentMethodDto.BinRange,
                                cardPaymentMethodDto.LastFourDigits,
                                cardPaymentMethodDto.ExpiryMonth,
                                cardPaymentMethodDto.ExpiryYear,
                                cardPaymentMethodDto.IssueNumber,
                                cardPaymentMethodDto.IssuingBank,
                                cardPaymentMethodDto.IssuingCountry,
                                cardPaymentMethodDto.Scheme,
                                cardPaymentMethodDto.StartMonth,
                                cardPaymentMethodDto.StartYear,
                                cardPaymentMethodDto.BillingAddress.House,
                                cardPaymentMethodDto.BillingAddress.SubPremises,
                                cardPaymentMethodDto.BillingAddress.Street,
                                cardPaymentMethodDto.BillingAddress.Town,
                                cardPaymentMethodDto.BillingAddress.County,
                                cardPaymentMethodDto.BillingAddress.Postcode,
                                cardPaymentMethodDto.BillingAddress.Country,
                                cardPaymentMethodDto.DateRegistered,
                                ref cardId);

                if (result <= 0)
                {
                        CompanySystemSqlException tex = new
CompanySystemSqlException("Database communications error");
                        tex.Data.Add("UserId", userId);
                        tex.Data.Add("PaymentMethod", cardPaymentMethodDto.ToString());
                        Logger.LogException("SaveCard: result <= 0", tex);
                        throw tex;
                }
        }
        catch (DbException ex)
        {
                CompanySystemSqlException tex = new
CompanySystemSqlException("Database communications error", ex);
                tex.Data.Add("UserId", userId);
                tex.Data.Add("PaymentMethod", cardPaymentMethodDto.ToString());
                Logger.LogException("SaveCard: DbException", tex);
                throw tex;
        }

        return cardId ?? 0;

}
public int-SaveCard(int-userId,cardpaymentmethodto
CardPaymentMethodTo)
{
int?cardd=0;
尝试
{
int result=this.dataContext.usp\u PaymentMethod\u Card\u Insert(userId,
CardPaymentMethodTo.UserAccountReference,
CardPaymentMethodTo.EncryptedCardNumber,
CardPaymentMethodTo.BinRange,
CardPaymentMethod至最后四位数字,
CardPaymentMethodTo.ExpiryMonth,
卡付款方式到期日,
CardPaymentMethodTo.IssueNumber,
发卡银行的卡付款方式,
发卡国家/地区的卡付款方式,
卡付款方式到方案,
CardPaymentMethod至月初,
CardPaymentMethodTo.StartYear,
卡付款方式到BillingAddress.House,
CardPaymentMethodTo.BillingAddress.SubPremises,
卡付款方式到BillingAddress.Street,
CardPaymentMethod to.BillingAddress.Town,
CardPaymentMethodTo.BillingAddress.County,
CardPaymentMethodTo.BillingAddress.Postcode,
CardPaymentMethodTo.BillingAddress.Country,
CardPaymentMethodTo.Date已注册,
参考卡迪德);
如果(结果)
x、 usp_PaymentMethod_Card_Insert(It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),It.IsAny(),
返回(1);
cardId=paymentRepository.SaveCard(1,新的CardPaymentMethod到
{BillingAddress=新地址到{Country=”“,County=”“,House=
“”邮政编码=”,街道=”,次级许可证=”,城镇=”},
BinRange=“”,Cv2=123,
DateRegistered=DateTime。现在是EncryptedCardNumber=
“混乱”,
ExpiryMonth=“02”,ExpiryYear=“2030”,Id=1,
IssueNumber=1,IssuingBank=“”,IssuingCountry=“”,
LastFourDigits=”“,LastUsed=DateTime.MinValue,Scheme
=“”,StartMonth=“”,StartYear=“”,
UserAccountReference=“”});
断言(cardId,Is.EqualTo(1));
}
现在显然我必须在单元中创建ref参数(refcardd) 测试,否则无法设置预期结果,但重新梳理 repository cardId变量,因此它显然失败了(由 第一种方法返回为零)

我肯定我错过了什么,但是什么

谢谢你的帮助, 干杯
Terry

我不太确定我是否理解了这个问题,但您在测试中已将0分配给refCardId

int? refCardId = 0;
您的mock不会更改此值,因为它无法更改。您的mock只是一个代理,它完全按照您在其安装方法中告诉它的方式进行操作。在这种情况下,您的mock在调用时将返回1。它不会对refcard执行任何操作

请记住,您的sut是paymentRepository及其存储卡方法-模拟仅用于测试sut,而不依赖于dataContext。

从Moq 4.8(尚未发布,但有预发布版本)开始,您可以使用
It.ref.IsAny
匹配
ref
参数:

dataContext.Setup(x => x.usp_PaymentMethod_Card_Insert(
                           It.IsAny<int>(),
                           It.IsAny<string>(),
                           ...
                           It.IsAny<DateTime>(),
                           ref It.Ref<int?>.IsAny))
           .Returns(1);
dataContext.Setup(x=>x.usp\u PaymentMethod\u Card\u Insert(
It.IsAny(),
It.IsAny(),
...
It.IsAny(),
参考它,参考IsAny)
.申报表(1);
看一下:
dataContext.Setup(x => x.usp_PaymentMethod_Card_Insert(
                           It.IsAny<int>(),
                           It.IsAny<string>(),
                           ...
                           It.IsAny<DateTime>(),
                           ref It.Ref<int?>.IsAny))
           .Returns(1);