в прокси-сервере, я могу переопределить жестко закодированные объекты в моих модульных тестах, таких как объекты Logger, следующим образом
let LoggerMock = { Logger: function() {},
log: function() {},
logInfo:function(message) {},
logError:function(error) { console.log(error)}
};
LoggerMock.Logger.prototype = {
constructor : LoggerMock.Logger,
log: function () { },
logInfo:function(message) {},
logError:function(error) { console.log(error)}
};
затем в модульном тесте:
describe('Unit Test for Authorization processResponseMessage', () => {
let ctrl = common.proxyquire('../../TransactionProcessing/transaction/pgw03', {
'../../local_modules/logger': common.LoggerMock,
'@noCallThru': true});
it('should test Authorization pgw transaction response', () => {
let responseMessage:any = {};
responseMessage.RESPONSE_CODE = "000";
let objpurchase = new ctrl['pgw03']();
objpurchase.processResponseMessage(responseMessage , message);
common.expect(message.RESPONSE_CODE).to.not.be.undefined;
common.expect(message.RESPONSE_CODE).to.equal("000");
});
}
здесь processResponseMessage использует объекты класса Logger, который смоделирован с помощью proxyquire.
проблема в том, что я не нашел ничего подобного в xUnit / Moq framework.
Как смоделировать жестко закодированные объекты (например, объекты, к которым осуществляется доступ к данным и которые следует обойти в модульном тесте) с помощью функции, не реализующей какой-либо интерфейс?