1. 首先給出第一個運用gtest的demo
#include "stdafx.h"
#include "gmock/gmock-actions.h"

using namespace testing;

class Calculate


{
public:

Calculate()
{}

long add(long a,long b)
{return a+b;}
};

class CalculateMock:public Calculate


{
public:

CalculateMock():Calculate()
{}
MOCK_METHOD2(add,long(long a,long b));
};

long testFun(Calculate& cal)


{
return cal.add(2,3);
}
TEST(testMock,testAdd)


{
CalculateMock obj;
long len = 10;
ON_CALL(obj,add(2,3)).WillByDefault(Return(len));
EXPECT_CALL(obj,add(2,3)).Times(1);
//obj.add(2,3);
EXPECT_EQ(10, obj.add(2,3));
}

int _tmain(int argc, _TCHAR* argv[])


{
testing::InitGoogleMock(&argc, argv);
RUN_ALL_TESTS();
return 0;
}


做第一個demo需要注意的事項:
1. 將用到的gtest,gmock,和你自己運用的project用同樣的code generation 的形式一致,將 project property->C++->Code Generation: 設置為:Multi-threaded Debug(/MTd)
2. 添加 using namespace testing, 否則會出現(xiàn)‘Return’Identifier not found.這樣的錯誤
So excited to make it work after so much confusion, anxiety.
Fighting!!
最近更換開發(fā)機的環(huán)境,從Windows XP換到Windows 7,結果以前在XP下的一個VS2008的一個插件項目在新環(huán)境中編譯老是出錯:
Failed to retrieve paths under VSTemplate for the specified registry hive
在網(wǎng)上搜索了一番,終于找到一篇文章介紹的解決方案:
運行Vs2008 SDK-〉Tools-〉Reset the Microsoft Visual Studio 2008 SP1 Experimental hive
然后重新編譯就OK了。
http://www.cnblogs.com/tubo/archive/2009/09/14/1566654.html
Build只編譯工程中上次修改過的文件,并鏈接程序生成可執(zhí)行文件。
如果以前沒有作過編譯,它會自動調用Rebuild操作,依次編譯資源文件、源程序文件等;
Rebuild不管文件是否作過修改,都會編譯工程中的所有源文件。
Visual Studio的智能性還不夠,它有時不能非常準確地判斷出都有哪些文件需要重新編譯。
于是,當你Build時,它僅僅把它認為需要重新編譯的重新編譯一下,而有時候它的判斷實際是不夠的。
但Rebuild就不同了,它把所有的東西都重新編譯,不管改過的,沒改過的;還是它認為有依賴的,沒依賴的,統(tǒng)統(tǒng)重來。
首先安裝msysgit,然后安裝TortoiseGit。
可以在程序中看到GitGUI和TortoiseGit。
使用GitGUI進行checkout。
步驟為:
1. 在電腦上create folder,命名為demo.
2.選中demo。在菜單中選擇git clone.
就可以checkout下來代碼。
SQL是一種基于集合的語言(a set-based language) ,他更擅長操作和提出一組數(shù)據(jù),而不是對
數(shù)據(jù)進行一行一行的處理。
SQL is a set-based language ,meaning that is excels at mantipulating and retrieving
set of rows ,rather than performing single row-by-row processing.
如果你的程序里一定要一條一條的執(zhí)行,那么一定要先考慮使用如while循環(huán),子查詢,
臨時表,表變量等等,如果這些都不能滿足要求,在考慮使用游標。
T-SQL中游標的生存周期:
1.用返回一個有效結果集的sql語句來定義一個游標。
a cursor is defined via a SQL statement that returns a valid result set.
2. 打開游標
3. 一旦游標被打開就可以從游標中每次取出一行數(shù)據(jù),要根據(jù)游標的定義可以向前去數(shù)據(jù)或
向后取數(shù)據(jù)
the rows can be fetched moving forword or backword ,depending on the original cursor definition.
4. 根據(jù)游標的類型,數(shù)據(jù)可以被修改或者只能讀。
5.最后,用完游標后,必須被顯示的關閉,并且從內存中移除。
游標定義格式:
declare cursor_name cursor
[local|global]
[forword_only|scroll]
[static|keyset|dynamic|fast_forword]
[read_only| scroll_locks|optimistic]
[type_warning]
for select_statement[for update [of column[,...]]]
The select_statement argument is the query used to define the data within the cursor. Avoid
using a query that hasmore columns and rows than will actually be used, because cursors, while
open, are kept inmemory. The UPDATE [OF column_name [,...n]] is used to specify those columns
that are allowed to be updated by the cursor.
條件處理:condtional processing
1.case函數(shù)以一個表達式作為輸入,一個值作為輸出
格式:case 后面有輸入表達式,when后面的的每一個表達式都會和case后面的輸入表達式進行比較運算
如果相等,則返回,否則返回else后面的表達式,如果沒有else則返回NULL。
case input_expression
when when_expression then result_expression
[...n]
[else else_result_expression]
end
case的第二種情況:
case后面沒有表達式,when后面跟的是bool表達式。返回第一個when后面計算為true的表達式
格式為:
case
when bool_expression then result_expression
[...n]
else result_expression
end
2. if....else...的格式
if bool_expression
{sql_statement|sql_block}
[else
{sql_statement|sql_block}
]
3.begin ....end 相當于c++中的{...}用來形成一個代碼塊
4.條件循環(huán)
return,while,goto,waitfor
return
return 用于結束當前的sql塊,查詢,存儲過程。
類似于c++中的return。
return 可以返回一個數(shù)字
while 類似c++中的while,同樣支持break,continue,break來結束當前內層循環(huán),continue繼續(xù)當前循環(huán)
waitfor格式
waitfor
delay 'time_to_pass'//執(zhí)行前等待的時間:格式為00:00:00小時:分鐘:秒
|time 'time_to_execute'//設置實際執(zhí)行的時間
|(receive_statement)[,TimeOUT timeout]
可以利用waitfor將某些復雜的執(zhí)行設定為在相對空閑的時間內進行。
__int64 long a=10;
printf("%i64u",a);
當兩個不同數(shù)據(jù)類型的表達式用運算符組合后,數(shù)據(jù)類型優(yōu)先級規(guī)則指定將優(yōu)先級較低的數(shù)據(jù)類型轉換為優(yōu)先級較高的數(shù)據(jù)類型。如果此轉換不是所支持的隱式轉換,則返回錯誤。當兩個操作數(shù)表達式具有相同的數(shù)據(jù)類型時,運算的結果便為該數(shù)據(jù)類型。
SQL Server 對數(shù)據(jù)類型使用以下優(yōu)先級順序:
-
用戶定義數(shù)據(jù)類型(最高)
-
sql_variant
-
xml
-
datetimeoffset
-
datetime2
-
datetime
-
smalldatetime
-
date
-
time
-
float
-
real
-
decimal
-
money
-
smallmoney
-
bigint
-
int
-
smallint
-
tinyint
-
bit
-
ntext
-
text
-
image
-
timestamp
-
uniqueidentifier
-
nvarchar(包括 nvarchar(max))
-
nchar
-
varchar(包括 varchar(max))
-
char
-
varbinary(包括 varbinary(max))
-
binary(最低)
1.函數(shù)原型:
LPTSTR
lstrcpyn(
LPTSTR
lpString1,
LPCTSTR
lpString2,//指向一個以NULL結束的字符串
int
iMaxLength //從lpString2拷貝到lpString1的字符串個數(shù),包括NULL字符
);
成功返回指向lpString1的指針,否則返回NULL。
如果lpString2的長度大于iMaxLength,該方法實際上是
將lpString2中的前iMaxLength-1個字符和
一個NULL字符拷貝到lpString1中。
如果該方法成功,則lpString1一定是以NULL結束的字符串。
2._tcsncpy是一個宏,考慮在unicode的情況下
define _tcsncpy wcsncpy
wchar_t *
wcsncpy(
wchar_t *
strDest,
const wchar_t *
strSource,
size_t
count );
Parameters
- strDest
-
Destination string.
- strSource
-
Source string.
- count
-
Number of characters to be copied.
Return Value
Returns strDest. No return value is reserved to indicate an error.
不能保證NULL結束,將count個字符拷貝到strDest中。
CString是我自己定義的一個類
為了實現(xiàn):
CString str("123abvc");
cout<<str<<endl;
聲明:
ostream& operator<<(ostream& os,const CString& str);實現(xiàn):
ostream& operator<<(ostream& os,const CString& str)
{
long multiBytes = WideCharToMultiByte(CP_ACP,0,str._pData,-1,NULL,0,NULL,NULL);//獲得將寬字節(jié)轉換成多自己時,所需要的字節(jié)個數(shù),注意藍色部分
char *lpMultiBytes = new char[multiBytes+10];//分配多字節(jié)時所需要的內存
memset(lpMultiBytes,0,multiBytes+10);
WideCharToMultiByte(CP_ACP,0,str._pData,-1,lpMultiBytes,multiBytes+10,NULL,NULL);//調用win32api函數(shù)將寬字節(jié)的表示轉換成為多字節(jié)的表示,注意藍色部分
os<<lpMultiBytes;
return os;//注意返回值
}