C++错误表达式必须具有整数或枚举类型从串联的字符串中获取?
所以在toString()C++的类中我有代码:
string bags = "Check in " + getBags() + " bags";
Run Code Online (Sandbox Code Playgroud)
我以为我可以声明这样的字符串?(我来自Java背景并试图学习C++).将bags在Visual Studio中,虽然强调和问题是:
表达式必须具有整数或枚举类型.
getBags()只是返回一个int.
发生这种情况的另一个例子是:
string totalPrice = "Grand Total: " + getTotalPrice();
Run Code Online (Sandbox Code Playgroud)
getTotalPrice()返回a float并且是带有错误的下划线.
但是如果我输入一行如下:
string blah = getBags() + "blah";
Run Code Online (Sandbox Code Playgroud)
没有错误.
我在这里不理解什么?
基本上我希望能够将方法插入到NUnit中的TestCase或TestFixture来改变行为.本质上我想这样做:
[TestFixture]
public class MethodTests
{
public delegate void SimpleDelegate();
public static void A()
{
// Do something meaningful
}
public static void B()
{
// Do something meaningful
}
public static void C()
{
// Do something meaningful
}
[TestCase(A,B,C)]
[TestCase(C,A,B)]
[TestCase(C,B,A)]
public void Test(SimpleDelegate action1, SimpleDelegate action2, SimpleDelegate action3 )
{
action1();
action2();
action3();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到的[TestCase(A,B,C)]的错误是
你知道是否有办法让这个或类似的东西工作?
我有以下方法生成一组测试用例!
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases(param1)
{
foreach (string entry in entries)
{
yield return callMyMethod(param1);
}
}
Run Code Online (Sandbox Code Playgroud)
如何将作为参数类型的param作为参数传递给我的PrepareTestCases()方法?
有没有办法做到以下几点:
[Test, Category("Integration"), TestCaseSource("PrepareTestCases", param1)]
public void TestRun(ResultsOfCallMyMethod testData)
{
// do something!
}
Run Code Online (Sandbox Code Playgroud) 我正在使用rhino mocks 3.5并且我试图在我的期望中抛出异常来测试我的catch块中的一些功能.
但由于某种原因,它并没有抛出异常.
_xyz.stub(x => x.function(string)).throw(new exception("test string"));
Run Code Online (Sandbox Code Playgroud)
所以,我正在调用函数来抛出异常,但它没有抛出异常.
这是一个例子:
interface IComponentA {};
class ComponentA : IComponentA { };
interface IComponentB { };
class ComponentB : IComponentB { };
interface IComponentC { };
class ComponentC : IComponentC
{
public ComponentC(IComponentA a)
{
Console.WriteLine("Constructor A");
}
public ComponentC(IComponentB b)
{
Console.WriteLine("Constructor B");
}
};
Run Code Online (Sandbox Code Playgroud)
所有这些组件都在Castle Windsor容器中注册.
但是类ComponentC有2个重载的构造函数.ComponentC激活时可以使用它们中的任何一个.
我需要使用ComponentC(IComponentB b)构造函数.
我暂时使用UsingFactoryMethod()方法来解决这个问题:
container
.Register(Component
.For<IComponentA>()
.ImplementedBy<ComponentA>())
.Register(Component
.For<IComponentB>()
.ImplementedBy<ComponentB>())
.Register(Component
.For<IComponentC>()
.UsingFactoryMethod(() => new ComponentC(
container.Resolve<IComponentB>())));
Run Code Online (Sandbox Code Playgroud)
它有效,但可能Castle Windsor提供了一些更好的方法吗?
任何帮助都非常感谢.
谢谢.
我的Repository类中有一个fallowing方法:
public virtual IEnumerable<T> GetAll(Expression<Func<T, bool>> where = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, Expression<Func<T, object>>[] includeProperties = null)
Run Code Online (Sandbox Code Playgroud)
我想问你,当我传递一些具体的lambda表达式时,如何嘲笑它可以返回一些特定的值?
SettingsRepository.Setup(
r =>
r.GetAll(
It.IsAny<Expression<Func<Settings, bool>>>(),
It.IsAny<Func<IQueryable<Settings>, IOrderedQueryable<Settings>>>(),
It.IsAny<Expression<Func<Settings, Object>>[]>())).Returns((Settings[])null);
Run Code Online (Sandbox Code Playgroud)
无论你将使用什么lambda,这都将返回null.
我正在寻找类似的东西:
Expression<Func<Settings, bool>> asdasd = s => s.SubmissionId==1;
SettingsRepository.Setup(
r =>
r.GetAll(
It.Is<Expression<Func<Settings, bool>>>(asdasd),
It.IsAny<Func<IQueryable<Settings>, IOrderedQueryable<Settings>>>(),
It.IsAny<Expression<Func<Settings, Object>>[]>()))
.Returns(() => new[] { new Settings { Submission = ValidSubmission } });
Run Code Online (Sandbox Code Playgroud)
最好的问候,天使
编辑:谢谢你的答案!伊利亚·帕尔金,你说得对!它应该是这样的:
It.Is<Expression<Func<Settings,bool>>>(ex=>ex == null)
Run Code Online (Sandbox Code Playgroud)
"ex"指向表达,我应该作为一个论点传递,对吧?lambda表达式是您预测的类型的委托.现在它正在运作!
SettingsRepository.Setup(
r =>
r.GetAll(
It.Is<Expression<Func<Settings,bool>>>(ex=>ex == null),
It.IsAny<Func<IQueryable<Settings>, IOrderedQueryable<Settings>>>(),
It.IsAny<Expression<Func<Settings, Object>>[]>()))
.Returns(() => …Run Code Online (Sandbox Code Playgroud) 如何知道提供了窗口句柄的控制台窗口的当前键盘布局?
对于 GUI 窗口,可以通过以下方式:
const auto threadId = ::GetWindowThreadProcessId(hwnd, nullptr);
const auto hkl = ::GetKeyboardLayout(idThread);
Run Code Online (Sandbox Code Playgroud)
但这种方法不适用于控制台窗口。
经过一番谷歌搜索后,我得到了以下结果:
从 Win7 开始,控制台应用程序的键盘布局可以从进程接收conhost.exe,该进程是cmd.exe. 更多细节可以在这里找到:
https://autohotkey.com/board/topic/43043-get-current-keyboard-layout/
但在这个问题中:
c++ how do i get the current console conhost process
我发现了 @RaymondChen 的评论conhost.exe- 是一个实现细节,在某些 Windows 版本中可能不存在。
因此,非标准解决方法似乎是可能的。但是否有任何标准的、兼容的方法来获得正确的结果呢?
PS,这里提出了类似的问题:
GetKeyboardLayout() 在某些情况下无法正常工作
但它对我的问题没有答案。
如果这是一个愚蠢的问题,请原谅我,但我在嘲笑方面相当新,我正试图解决它.
我有一些单元测试(使用内置的Visual Studio 2010 Professional测试功能),它使用方法所需的存根.我创建了一个存根,并设置了几个属性和方法的默认返回值,一切运行良好.我有一个静态类来设置存根,这在TestInitialize方法中用于设置存根...
public static AppointmentReminderProviderInterface GetMockProvider() {
AppointmentReminderProviderInterface provider = MockRepository.GenerateStub<AppointmentReminderProviderInterface>();
provider.Stub(p => p.ContactName).Return(MockProviderContactName);
provider.Stub(p => p.ContactEmail).Return(MockProviderContactEmail);
return provider;
}
Run Code Online (Sandbox Code Playgroud)
请注意,MockProviderContactName并且MockProviderContactEmail是包含提供程序的默认数据的本地字符串属性.该单元检查以查看是否按照默认数据进行操作是否正常.
但是,我现在想测试当其中一个属性包含duff数据时会发生什么.我以为我可以在存根上设置它,但它不起作用.测试方法包含以下几行......
_provider.Stub(p => p.ContactEmail).Return("invalid");
Debug.WriteLine("Provider email: <" + _provider.ContactEmail + ">");
Run Code Online (Sandbox Code Playgroud)
这Debug.WriteLine()告诉我,尽管我已经设置了ContactEmail属性以返回"无效",但它仍然返回默认的电子邮件地址.这导致我的测试失败,因为我期望它抛出异常,但事实并非如此.
任何人都知道为什么我不能改变这个属性的返回值?
谢谢你的帮助.
我正在使用Rhino Mocks 3.5模拟一个服务方法调用,该调用需要2个参数,我想确保正确设置对象上的某个属性.
// Method being tested
void UpdateDelivery( Trade trade )
{
trade.Delivery = new DateTime( 2013, 7, 4 );
m_Service.UpdateTrade( trade, m_Token ); // mocking this
}
Run Code Online (Sandbox Code Playgroud)
这是我的一部分代码(有效)
service, trade, token declared / new'd up ... etc.
...
using ( m_Mocks.Record() )
{
Action<Trade, Token> onCalled = ( tradeParam, tokenParam ) =>
{
// Inspect / verify that Delivery prop is set correctly
// when UpdateTrade called
Assert.AreEqual( new DateTime( 2013, 7, 4 ), tradeParam.Delivery );
};
Expect.Call( …Run Code Online (Sandbox Code Playgroud) 我无法65536使用boost::asio::windows::stream_handle异步方式从文件中读取超过字节的字节数.
从65537第一个字节开始,缓冲区包含文件最开头的数据,而不是预期的数据.
这是一个代码示例,它重现了这个问题:
auto handle = ::CreateFile(L"BigFile.xml", GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nullptr);
boost::asio::io_service ios;
boost::asio::windows::stream_handle streamHandle(ios, handle);
const auto to_read_bytes = 100000;
char buffer[to_read_bytes];
boost::asio::async_read(streamHandle, boost::asio::buffer(buffer, to_read_bytes), [](auto &ec, auto read) {
std::cout << "Bytes read: " << read << std::endl;
});
ios.run();
auto bufferBegin = std::string(buffer, 38);
auto bufferCorrupted = std::string(buffer + 65536, 38); // <- it contains bytes from the beginning of the file
std::cout << "offset 0: " << bufferBegin …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
int main() {
int x[] = {2, 3, 1, 5, 6, 9};
int j, i, s;
for (i=0; i<6; i++){
if (x[i] % 2 == 1){
break;
}
}
printf("%d", i);
for (j=5; j>1; j--){
x[j+1] = x[j];
}
printf("%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先printf打印1,而另一个printf打印9.i你可以看到我在此期间没有改变.为什么打印9?
我有一个QGraphicsView更大的QGraphicsScene可以拖动的。在QGraphicsScene我有一个子类QGraphicsItem( TestItem) 中,它显示QGraphicsPixmapItem,它可以具有随机形状。(我不QGraphicsPixmapItem直接使用,因为将来要实现额外的功能)
我希望这个项目是可移动的,但前提是用户在该项目的形状内按下。如果在形状之外,但仍在 内部boundingRectangle,我希望拖动其后面的场景。这是因为boundingRectangle可能比形状大得多并且用户看不到它,所以尝试将场景拖动到 附近Pixmap并且它不起作用会很奇怪。
这是我的子类项目:
TestItem::TestItem(QPointF position, QPixmap testImage, double width,
double length, QGraphicsItem * parent):
QGraphicsItem(parent),
m_boundingRect(QRectF(0,0,5, 5)),
m_dragValid(false),
m_path(QPainterPath()),
mp_image(new QGraphicsPixmapItem(this))
{
setBoundingRect(QRectF(0,0,width,length));
setPos(position - boundingRect().center());
setFlag(QGraphicsItem::ItemIsMovable);
mp_image->setPixmap(testImage.scaled(width, length));
m_path = mp_image->shape();
}
QPainterPath TestItem::shape()
{
return m_path;
}
QRectF TestItem::boundingRect() const
{
return m_boundingRect;
}
void TestItem::setBoundingRect(QRectF newRect)
{
prepareGeometryChange();
m_boundingRect = newRect;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过像这样覆盖鼠标事件,但它给我带来的只是在形状外部但在边界矩形内部时根本没有任何功能
void …Run Code Online (Sandbox Code Playgroud) qt qgraphicsview qgraphicsitem qgraphicsscene custom-widgets
我正在学习单元测试.如何使用NUnit和Rhino Mock对此方法进行单元测试?好吧,我已经测试了try块,并希望测试catch块代码覆盖率.
[HttpPost]
public ActionResult AppraisalOrderIsAcceptedByEmployee(int appraisalOrderId)
{
try
{
this.appraisalOrderService.SubmitAppraisalOrder(appraisalOrderId);
}
catch (MessageLoneException ex)
{
// Display validation errors
PersistErrors(ex);
// Remains on the same view
return RedirectToAction("VerifyOrderDetails", new { id = appraisalOrderId });
}
return GetLoginRedirectCurrentUser();
}
Run Code Online (Sandbox Code Playgroud) c# ×7
rhino-mocks ×4
c++ ×3
nunit ×3
unit-testing ×3
mocking ×2
winapi ×2
.net ×1
boost ×1
boost-asio ×1
c ×1
delegates ×1
expression ×1
lambda ×1
moq ×1
qt ×1
stub ×1
testing ×1
windows ×1