我在我的代码中使用了RMI:
import java.rmi.*;
public interface AddServerIntf extends Remote {
double add(double d1,double d2) throws RemoteException;
}
Run Code Online (Sandbox Code Playgroud)
import java.rmi.*;
import java.rmi.server.*;
public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf {
public AddServerImpl() throws RemoteException {
}
public double add(double d1,double d2) throws RemoteException {
return d1+d2;
}
}
Run Code Online (Sandbox Code Playgroud)
import java.net.*;
import java.rmi.*;
public class AddServer {
public static void main(String args[]) {
try {
AddServerImpl addServerImpl=new AddServerImpl();
Naming.rebind("AddServer",addServerImpl);
} catch(Exception exc) {
System.out.println(exc);
}
}
}
Run Code Online (Sandbox Code Playgroud)
import java.rmi.*;
public class AddClient { …
Run Code Online (Sandbox Code Playgroud) 我试图存根以下内容:
on('complete', function(data){ });
Run Code Online (Sandbox Code Playgroud)
如果第一个参数是'complete',我只想调用回调函数.
我正在测试的功能还包括:
on('error', function(data){ });
Run Code Online (Sandbox Code Playgroud)
因此,我不能仅仅执行yield会导致完成和错误回调.
如果我不使用sinon,我会通过编写以下内容来伪造它.
var on = function(event, callback){
if (event === 'complete'){
callback('foobar');
};
};
Run Code Online (Sandbox Code Playgroud) 我想重新存根someHandler.getStatus
,但我得到了TypeError: Attempted to wrap getStatus which is already wrapped
......
it('is a test', function() {
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 1
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 0
});
});
});
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中有一个推荐列表,单击该列表会打开一个带有动态地址的新窗口:
$window.open(_shopURL, '_blank');
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试存根 windows.open 事件,如https://github.com/cypress-io/cypress-example-recipes/blob/master/examples/stubbing-spying__window/cypress/integration/window-stubbing中所示.spec.js
Cypress.on('window:before:load', (win) => {
win.open = cy.stub().as('windowOpen')
})
describe('Shop integration', () => {
beforeEach(function () {
cy.visitHome(countryCode, resellerId)
})
it('can stub the window open event', function () {
cy.get(`.recommendations-list .recommendations-cover:nth-of-type(1)`)
.click()
cy.get('@windowOpen').should('be.calledWith', 'page1.html')
})
Run Code Online (Sandbox Code Playgroud)
但它总是打开新选项卡并且日志是错误的: Cypress:stub open window
有人知道为什么它不起作用吗?干杯!
刚进入使用C++的单元测试.看起来我需要编写几个存根类.我的理解是Mocks和Stubs之间存在差异.基本上似乎Mocks适用于测试对象上发生的事情(例如验证),而Stubs只是方便您进行测试.我想嘲笑,我可以使用googlemock,但我没有看到任何内容用于创建Stubs(ala RhinoMocks'GenerateStub).
有没有办法获得自动生成的存根?googlemock是否支持存根?或者我是否必须手动创建存根以进行测试?
我可以知道如何在控制器创建方法中使用存根方法吗?我需要为此编写规范但是我遇到了这些错误.我需要在模型中创建新的公司记录之前检查控制器中的create方法必须执行validate_fbid方法.
错误:
1) Companies new company create with valid information#validate_fbid should have correct parameters and return value
Failure/Error: CompaniesController.create.should_receive(:validates_fbid).with(company)
NoMethodError:
undefined method `create' for CompaniesController:Class
# ./spec/requests/companies_spec.rb:38:in `block (5 levels) in <top (required)>'
2) Companies new company create with valid information#validate_fbid should fbid validation passed
Failure/Error: CompaniesController.create.stub(:validates_fbid).and_return('companyid')
NoMethodError:
undefined method `create' for CompaniesController:Class
# ./spec/requests/companies_spec.rb:43:in `block (5 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
CompaniesController
def create
company = Company.new(params[:company])
verifyfbid = validate_fbid(company)
if verifyfbid != false
if company.fbid.downcase == verifyfbid.downcase
if company.save …
Run Code Online (Sandbox Code Playgroud) 我试图对从WebAPI(OData)控制器调用的一段代码进行单元测试,并接受一个HttpControllerContext:
public string MethodToTest(HttpControllerContext context)
{
string pub = string.Empty;
if (context != null)
{
pub = context.Request.RequestUri.Segments[2].TrimEnd('/');
}
return pub;
}
Run Code Online (Sandbox Code Playgroud)
要对此进行单元测试,我需要一个HttpControllerContext对象.我该怎么办呢?我最初试图用Microsoft Fakes来存根,但HttpControllerContext似乎没有接口(为什么??),所以这似乎不是一个选项.我应该只是新建一个新的HttpControllerContext对象,并可能存根构造函数参数?或者使用Moq框架(而不是!)
我曾经使用过JUnit和Mocks,但我想知道,JUnit中的Mocks和Stubs之间有什么区别,以及如何在JUnit,Java中使用Stubs?而作为拥有EasyMock,Mockito等的Mocks,Stubs在Java中使用了什么?
请给出Java中Stubs的一些示例代码.
用于创建通道的 gRPC C++ API 返回一个 shared_ptr。生成的函数 NewStub 返回一个 unique_ptr。但是,我已经看到有人在尝试创建存根类型的多个实例、共享频道时遇到问题的报告。他们的解决方案是共享存根。
从文档或 API 中不清楚客户端是要创建多个共享通道的存根实例还是共享单个存根。请阐明存根、通道和唯一客户端连接之间的概念关系。
深入一点:服务器可以提供多个服务,客户端端点可以使用单个通道将相应的存根类型连接到这些服务中的每一个。为此,很明显不同的存根类型共享单个通道以与服务器端点通信。对于给定的服务,gRPC 是否期望每个通道只有一个客户端,或者我可以在客户端端点上有多个客户端与单个服务通信?如果允许,如何在客户端端点上为给定服务实现多个客户端?服务器如何将这些区分为独立的客户端?
顺便说一句,这篇 SO 帖子表明 Channels 和 Stubs 都是线程安全的。(这篇文章是专门针对 Java 的,但我假设它会延续到 C++)。
我正在用 Cypress 编写一个端到端测试,我想存根我的应用程序发出的网络请求。具体来说,我想删除多个在正文中有参数的 POST 请求,并根据这些参数更改我的模拟响应。
我想做类似的事情
cy.route({
method: "POST",
url: "/todos/add"
params: {
"urgency": 3,
"stakeholder_id": "SKH001"
},
response: "fixture:add1.json",
})
cy.route({
method: "POST",
url: "/todos/add"
params: {
"urgency": 1,
},
response: "fixture:add2.json",
})
Run Code Online (Sandbox Code Playgroud)
但是在阅读 https://docs.cypress.io/guides/guides/network-requests.html和https://docs.cypress.io/api/commands/route.html#Arguments 后,我没有看到支持检查被存根的请求中的参数的方法。
我可以通过将函数传递给 的onRequest
参数来完成此操作cy.route
吗?如果是这样,我会从那个告诉赛普拉斯“这条路线实际上不处理这个请求”的函数返回什么?
stub ×10
javascript ×3
mocking ×3
c++ ×2
cypress ×2
java ×2
sinon ×2
unit-testing ×2
c# ×1
channel ×1
client ×1
googlemock ×1
grpc ×1
junit ×1
networking ×1
rmi ×1
rspec ×1
testing ×1
window.open ×1