一時程式寫不出來,想說來試試Google是不是所有關鍵字都中獎 XD
首先看看Google,嘖嘖….Google看來是跟Skynet是一夥的
Youtube也中獎了,看來Youtube威脅Google霸業讓Google很不爽 XDDD
接著試試微軟,看來Google也看微軟不爽很久了 XD
沒想道死對頭Yahoo居然沒事!? 看來Google和Yahoo以及Skynet都有一腿!
我本來還想搜尋鮑魚,可是這鮑有毒的梗好像有點太虛了 XD
一時程式寫不出來,想說來試試Google是不是所有關鍵字都中獎 XD
首先看看Google,嘖嘖….Google看來是跟Skynet是一夥的
Youtube也中獎了,看來Youtube威脅Google霸業讓Google很不爽 XDDD
接著試試微軟,看來Google也看微軟不爽很久了 XD
沒想道死對頭Yahoo居然沒事!? 看來Google和Yahoo以及Skynet都有一腿!
我本來還想搜尋鮑魚,可是這鮑有毒的梗好像有點太虛了 XD
剛剛在Google搜尋資料時突然發現,奇怪,怎麼好多網站都出現
這個網站可能會損害您的電腦
仔細看看是所有的網站都變成這樣了= =
仙人打鼓有時錯,連精明一世的Google也有腦殘出槌的一天阿= =
看來現在所有網站都被認為被植入病毒 XD,這麼一來就分不出到底哪個是有毒,哪個是沒毒了,全世界的電腦都中毒了,看來世界末日不遠了 XD 天網 Sky Net 背叛人類啦~
個人猜測是Google自己內部可能程式有問題放上線的可能比較大,例如測試碼沒清掉就上線= =』 PTT上次權限大放送似乎就是這種狀況 至於Google到底會不會犯這種低等錯誤 我也不知道 不過被入侵也是有可能XD 總而言之我好期待Google如何解釋這次事件的原因
在找Boost文件時無意間找到對岸的Boost文件漢化社群,為了自己能方便使用,也為了大家方便,畢竟不是每個人都懂英文,所以我向他們要了一份,然後用自動化簡體轉繁體程式轉換,不過因為文件的編碼沒有統一,所以有些自動翻出來是亂碼,有空的話再解決,有些部份也還沒翻譯,未來應該會慢慢補上
很多時候我們會見到一些英文用法,但是這些用法並不是單字,像是Meta,一開始我看見這個字首時都覺得一頭霧水,它那麼的常見,很多地方都出現meta,但是我卻不知道那個字首是什麼意思,很多書也都直接使用沒有任何解釋,直到後來好像在一本書上有解釋,我才瞭解meta的意思
其實Meta這字首只要瞭解意思其實很簡單,他是指連接在後面的字詞,其關聯的的概念是那個字詞本身,這麼說很抽象,我自己也不知道自己在說什麼,我們來看一些例子就很好懂
meta-data 是由 meta + data組成,它的意思就是
關於資料的資料
講明白一點就是內容是用來記錄別的資料的資料,例如長度、類形等等…
再舉一個例子
meta-programming,有人翻做』超程式』還什麼的,不果不管翻什麼,要真的表達清楚是很不容易,這是在C++ template相關的書上看到的,meta-programming的意思就是
用來產生程式碼的程式設計手法
在一本C++ template的書中,它是一種利用template,用參數遞迴、特化樣版等各種方法,來達成編譯時期執行特定動作的技術,從某種程度來講,你寫的程式是用來產生程式碼,所以叫meta-programming,而超程式這個翻譯,瞭解他的意思後就比較容易明白
在美國租的主機不停的在抓資料,現在已經到了3百萬筆了,對於要知道筆數,最直觀的方式就是使用
Select Count(*) From xxx
但是我發現這樣極奇的慢,我們可能覺得很奇怪,以設計上來看,通常應該都要有個欄位是用來記錄這個資料表有多少筆資料,何以可以慢到這種地步,在上網找一堆資料,終於發現了原因,原來因為InnoDB可能有不通的交易同時發生,每筆交易中,可能會有刪除、新增等等事件發生,所以可以說每筆交易裡看到的筆數都是不一樣的,因此每次select count(*)都要做整張表的掃描,到了百萬的數量級,會這麼慢是理所當然的,替代的做法,可以使用
Show Table Status Like ‘xxx’
裡面有個欄位是行數,不過那個數字會和真的數字有差別,欄位裡的數字比較』髒』,但是以大部份的用途,像我們會用到Select Count(*)通常是想知道裡面有幾筆資料,不是很要緊的數字的話,其實差一些也不會怎樣,最經典的應用通常是』我們的網站有xxx個會員』,根本沒人會在意那個數字差了一點
這問題的答案我是在這篇文章裡找到的
我發現那真的是一個很棒的部落格
如同上面所寫的
Everything about MySQL Performance
裡面只談MySQL的效能問題,如何提升的做法,作者群似乎是來自一家專門幫忙提升MySQL資料庫效能的公司,遇到MySQL效能的問題這個部落格應該可以找到很好的答案,除此之外他們也有出一本High Performance MySQL, Second Edition的書
今天要將一些C++程式弄成Python模組,使用Boost.Python,以bjam編譯時一直跑出一堆鬼打牆的錯誤訊息
這個時候不應有 \Utilities\Bin\x86″;F:\Inprise\vbroker\bin;F:\Borland\CBUILD~1\Bi
n;F:\Borland\CBUILD~1\Projects\Bpl;』F:\Microsoft。
這個時候不應有,到底是什麼鬼東西是這裡不應該有的,我仔細觀察了一下,把bjam呼叫的內容全印出來,可是都找不到有參數是那段一堆路徑,再仔細看看那堆路徑看起來像是Path裡的東西,想一想bjam應該丟參數給compiler而已,於是就懷疑是VC++ 9.0 Express的問題,花了好大的力氣,讓我找到了
這篇文章 :
才解決這個問題,原來是安裝的SDK像』C:\Program Files\Microsoft DirectX SDK (June 2006)\Utilities\Bin\x86″有括號,在bat檔裡被錯誤解析的樣子
很多時候其實都希望程式設計相關的錯誤訊息不要中文化,像是這個,』這時候不應該有』,放到Google搜尋只會出現一堆不相關的東西,但是原文』was unexpected at this time.』 下去找很快就能找到相關的資料,我記得之前在Ubuntu下編譯程式,就有遇到編譯器錯誤訊息輸出被中文化的情況…,真的是鬼打牆,沒翻還好,一翻根本不知道它在說什麼鬼,也沒辦法貼到Google找資料
話說,有玩過魔獸爭霸三國無雙之類的地圖的人都知道,看到數字人,也就是ID全由數字組成的玩家,有很大的機會中離,不過這一點都扯不上邊 XD
最近很熱鬧的事情是,知名部落客Mr.6先生開的程式設計課程被踢暴課程的內容很差勁
大約看了一下是教一些PHP MySQL之類老掉牙的東西,但驚人的是三堂課要$4500大洋,而且跟據上面的部落格暴料還教得不怎麼樣,但是廣告詞卻寫得非常動人,想創業沒法靠別人,所以只能靠自己寫程式,學完就能靠自己寫程式創業之類的巴拉巴拉…
那我們未來要靠寫程式吃飯的資工系學生們是不是全都要去喝西北風啦? 為什麼這次事件會被罵得那麼慘,原因很簡單
頂著史丹佛等的和一堆亮麗經歷的光環,收費4500,但教的卻都是一些老掉牙了無新意的東西,PHP不難,但是真的值得不懂程式想學寫程式的人學習用來創業,用來寫網頁嗎? 先不論教得好不好,我個人認為:
PHP是一個設計很差勁的程式語言(請參考別讓危險成為預設的行為,讓危險的行為比安全的行為更麻煩),但不可否認的它是目前用來寫網頁最流行的程式語言,它也有它許多的優點,中文資源隨手可得,對於初學者來說,要用PHP寫網頁卻實是不難,但是,要寫出合格的網頁程式,卻需要很多瑣碎的know-how,不是初學者三兩天就可以達成的事情,初學者可以用PHP寫出各種常見的網頁程式,但是裡面充滿無數的問題、臭蟲、漏洞,光是一個許功蓋問題初學者可能就覺得莫明奇妙,但遲早會遇到,聲稱要三堂課教會學生寫PHP到可以用來自行創業,我只能說胡扯
一樣技術有多老掉牙,或許我們可以定一個指標,叫做天瓏書局中文書指標,用技術的名詞在天瓏書局搜尋中文書,看數量有多少
有118筆符合的書,PHP到底有多老掉牙,這表示PHP的中文資源已經是唾手可得的地步,隨便找個有工程師的頭銜的人問他,你會不會PHP? 我想有八成的機會他都會回答Yes,即使是社交工程師(誤),但在這裡我要強調的是,不是老掉牙、被用到爛掉就表示它不好,我一直都認為每種程式語言都各有優缺點,將他們用在正確的地方才是明確的選擇,而六先生聲稱想創業寫網頁教的居然是PHP土法煉鋼在寫網頁,這真的令人覺得不解,到底要寫到民國幾年,更何況既然PHP MySQL等已經那麼普遍,到底有什麼價值可以花4500元去學?
真正想要快速寫能用的網頁,最好是學習網頁框架,隨便一款網頁框架都比用PHP土法鍊鋼做起來得好,收費昂貴教的卻是那麼落伍且不明智的方式,真令人覺得無法認同,但是姜太公釣魚,願者上勾,如果覺得真的有那個價值,去學也沒人能阻止,但在我看來,這就好像去用高價買一瓶平凡無奇的水,明明是隨手可得的東西,但是上面貼著』史丹佛雙碩士』,一樣的道理
以我的看法,如果教的是現代一點的東西還令人能接受,像TurboGears、Django、Ruby On Rails等等,我們來看看天瓏書局中文書指標
TurboGears 1 (簡體中文)
Django 0筆
Ruby On Rails 12筆
同樣是中文資源,差那麼多,我如果今天是初學者,也沒辦法靠自己學習最新的技術,中文書少得可憐,或著根本沒有,就算英文能力夠,礙於技術的背景知識的需要而學不了那些東西,如果是這樣的話,開課教這些網頁框架,快速開發、省略細節、更安全、更有生產力、更敏捷,也比較適合創業的目的,再者很少人會,才有那樣的價值,這樣看來花4500去學明明已經被用到爛掉,那麼多人會的東西其實蠻冤大頭的,真的要學PHP找家教一對一教學都來得便宜和實在,或是買本書來自學也便宜又實惠
但是,再次的,我必須要強調,也不是越新的技術就越好,它們有比現有的東西更好的地方,但缺點就是因為很新資源比較少,可能有不夠穩定等問題,物以稀為貴,正因為很少人懂,才顯得有價值,我記得我以前我有個家教學生在討論價錢時這麼跟我說
我去家樂福打工一個小時才多少
我想了一想,就這麼回答他
你去路邊隨便拉一個人都能去家樂福打工,但是你沒辦法路邊拉一個人來教你C語言
這是同樣的道理,隨手可得的東西沒什麼價值,而學習最新技術的基本門檻是英文能力,英文能力不好,只能看中文書的話,等到有人翻譯通常又有更新更好的東西出來了,只會中文的話就永遠只能落在人後,六先生自稱
美國史丹佛電機、管理雙碩士,14歲移民加拿大,而後移居美國矽谷
即然有能力,為何不教一些較現代的技術,卻教PHP MySQL等土法鍊鋼的方式,想要創業,自己寫程式,這明明PHP+MySQL是個很不切實際的選擇,六先生如果真的有心想開課教人寫網頁創業,個人建議還是學一些現代一點的東西來教比較實在
我認為,可能,但機會很小,即然我們知道速成的程式設計能力是胡扯,那麼表示真的要能夠寫真正能用的程式需要時間,網路是瞬息萬變的,等你真的學會,寫出程式來,網路可能又是另一回事了,不過到了那個時候至少有技術,有能力可以實現自己的想法,視當時的情況實現也不是不可能,至於要花多久呢? 我想… 十年吧,我曾看過一篇文章這麼說,學習一樣專業,需要十年的時間,這文章我一時找不到,我個人覺得蠻認同這樣的說法,我個人從國一開始學寫程式,到今年差不多九年了,畢業的話就剛好十年了,但是我覺得我還是有很多東西要學,或許你覺得不認同,你說我照著六先生教的可能三天就能寫個留言版還什麼的,但是事實是,程式有分大小,小程式就算隨便亂寫、躺著寫、坐著寫、趴著寫、跳著寫,也硬是可以寫出來,但大程式就不一樣了,當你程式寫著寫著,規模越來越大,你會發現程式越來越混亂,越來越難以除錯,到最後你的程式變成一沱難以想像的東西,你這邊改了發現那邊居然跑出漏洞,那邊改了又跑出新的漏洞,為什麼我瞭解,原因很簡單,我寫過數不清的爛程式,從土法鍊鋼開始慢慢地摸索,因此我很清楚爛程式寫大的時候到底是什麼情況,但寫出來就算了,事情才剛開始,程式不是寫出來就結束了,你還得維護它,如果有新的功能要加進去怎麼辦? 使用者太多原本的系統沒辦法負擔又該怎麼辦? 又得想辦法改寫程式,現實是殘酷的,不是每個人都是你網站、程式的愛護者,會有一群無聊的、為了利益的人,想盡各種方法來玩你的系統,為了好玩、為了撈你的資料賣給詐騙集團,老練的設計師都有可能出錯導至系統被攻擊,更何況是半生不熟的設計師,所以為了要能創業而學寫程式,真的能成功的機會可能比中樂透還低,不過我相信真的有人能做到,但肯定是有過人毅力的奇才
土法練鋼寫程式的人我個人稱為』黑手』,不可否認我當過很久的黑手,用各種笨方法硬寫程式,所以才會遇到各種問題,那到底缺少什麼? 程式設計師和程式黑手的差別到底在哪裡? 程式設計的重點在於設計,到底什麼是設計? 六先生提過設計
姚老師告訴對方,「啊,他在學程式設計!」
17歲的我,非常驕傲的抬起頭來。不是因為「程式」這個炫麗的字眼,而是「設計」。
加拿大沒有什麼好科系和壞科系的,沒有「選系不選校」的問題,我一點都不為「程式」而驕傲,我為「設計」而驕傲。
17歲,只有考試,只有作業,只有報告…什麼,「設計」?所以,以後我真的可以這個叫「程式」的東西來「設計」囉?
從那隻會動的蟲子以後,我果然就發現,原來,用程式要實現自己的任何點子,是這麼容易的一件事!
六先生說對了重點,程式設計真正重要的的確是設計而不是程式,但是我很懷疑他到底懂不懂得設計,我承認我對於設計還差很遠,有人曾這樣說過
有才華洋溢的年輕編程人員,但沒有年輕的程式設計師
原文是英文,我記得似乎是在某本書上看到的,一時也想不起來,我寫的語意用詞可能也沒有那麼正確,但是他想表達的大概是這樣,寫程式這件事情要寫得好其實不難,很多程式設計師很年輕就表現出很強的編程能力,但是很少有程式設計師在年輕時就能表現出設計能力,這表示設計不是很短的時間內可以學會的,需要的是長時間的累積,不是說設計兩個字就真的會設計
除此之外六先生還有提到
所謂速成,就是一個月內就開始寫點子。
我們希望找到一群志同道合的人或許一起創業。
我們希望一邊寫,一邊還討論現在網路最新的狀況與可用的API。
我們還一邊交換自己使用的機房與SEO的建議。
甚至,我們互相幫對方寫對方的程式,整個課程就像一個超大的創業團隊,各有各的目標,但各自之間是互相幫忙的。
這問題就更大了,團隊寫程式和一個人寫程式是兩回事,著名的軟體專案開發經驗談的書 『人月神話』 裡有提到,軟體的開發不像是收割小麥,人越多就越有效率,而是人越多,所需要付出的溝通成本就越多,反而會更沒有效率,一個人寫程式,你自己怎麼寫,你自己知道,所有的東西都在你的掌控中,歐~ 不,連你自己都可能忘記自己以前寫的程式,更何況是和別人合作,你得讀別人的程式,他寫出來的如果是天書,你也要能讀懂天書才能夠和他合作,而且程式的開發,如果需求是自己想,自己來實現會最有效率,如果是別人的需求,經過溝通,很容易發生寫出來的程式不是需求者要的東西,從六先生所謂的互相幫對方寫對方的程式,真的是莫名奇妙, 一整個團隊成員們都有不一樣的目標,但是卻又能共同開發來達成這些目標,真的能辦到,我只能說六先生太神了….
我沒有史丹佛學歷,也沒待過知名企業,只有自學程式九年,寫程式不怎樣,打嘴砲還有點自信的小小阿宅,以上純屬嘴砲….僅供參考,看看就好 XD
一直一來我都知道Unit Test對於程式的開發是蠻重要的一個環節,在以往我們常常不停地改寫程式,在這個過程中,有意無意地常常會有東西被改壞掉還不知道,而我們檢查的方式可能很常是透過一直修改程式碼或輸入的資料來測試,但是當程式越來越大,我們測試時只專注在一個地方,此時所要測試的程式越來越多,不小心出錯的可能也越來越多,每改寫一次就是一次昂貴的人力檢查,最後程式就像一艘漏水的船,補了這裡,那裡卻又多了一個洞,船員像無頭蒼蠅一樣四處補洞,這樣的情況就是Unit Test能解決的問題,透過Unit Test,每次寫的程式碼都交給程式自動測試,一來測試的速度很快,不管是一百次還是一千次,總比人工測試來得快速、正確、廣範,但這不是免費的,代價就是程式設計師要寫很多Unit Test的程式碼,還要想要如何寫Unit Test的程式,進一步的還有測試導向的開發模式(Test-driven development),程式是在Unit Test寫完之後才開始寫,這樣一來迫使程式設計師在一開始就得把設計想好,邊寫邊想的做法不再可行,這或許算缺點也算優點
這些我都知道,但都沒有很確實去做,之前有用Python寫過Unit Test,他那種寫法我很喜歡,但C++卻沒有,直到這次想開發某些東西,我決定要試著落實TDD,但在開始以前,要有合適的工具,也就是自動測試的框架,起初我使用Boost.Test,雖然說可以使用,但是我不得不抱怨,他的文件是寫給鬼看的,好幾十頁的文件裡面廢話連篇,分類也很不明確,難以找到重點,或許是我英文程度太差,我真的讀不太懂Boost.Test到底怎麼用,靠著東拼西湊勉強終於還算可以使用,但是或許是我搞不太清楚它一堆Compile時用的Macro定義的Flag如何使用,編譯起來不知為何非常地慢
不合胃口(有些反胃的感覺)的文件,讓我覺得該是時候和Boost.Test說再見,尋找新歡的時候到了,無意間發現,在不知道什麼時候突然冒出來的Google Unit Test Framework,似乎才剛釋放出來沒多久,是Google內部C++寫Unit Test的框架,開放成Open source的專案,看起來很不錯,文件簡單明瞭,不像Boost.Test幾十頁連篇翻半天還不知道Unit Test到底要怎樣執行,他們主張為什麼要使用Google Unit Test Framework的理由:
- Tests should be independent and repeatable. It’s a pain to debug a test that succeeds or fails as a result of other tests. Google C++ Testing Framework isolates the tests by running each of them on a different object. When a test fails, Google C++ Testing Framework allows you to run it in isolation for quick debugging.
- Tests should be well organized and reflect the structure of the tested code. Google C++ Testing Framework groups related tests into test cases that can share data and subroutines. This common pattern is easy to recognize and makes tests easy to maintain. Such consistency is especially helpful when people switch projects and start to work on a new code base.
- Tests should be portable and reusable. The open-source community has a lot of code that is platform-neutral, its tests should also be platform-neutral. Google C++ Testing Framework works on different OSes, with different compilers (gcc, MSVC, and others), with or without exceptions, so Google C++ Testing Framework tests can easily work with a variety of configurations. (Note that the current release only contains build scripts for Linux – we are actively working on scripts for other platforms.)
- When tests fail, they should provide as much information about the problem as possible. Google C++ Testing Framework doesn’t stop at the first test failure. Instead, it only stops the current test and continues with the next. You can also set up tests that report non-fatal failures after which the current test continues. Thus, you can detect and fix multiple bugs in a single run-edit-compile cycle.
- The testing framework should liberate test writers from housekeeping chores and let them focus on the test content. Google C++ Testing Framework automatically keeps track of all tests defined, and doesn’t require the user to enumerate them in order to run them.
- Tests should be fast. With Google C++ Testing Framework, you can reuse shared resources across tests and pay for the set-up/tear-down only once, without making tests depend on each other.
聽起來很合我胃口,於是就下載來試試,首先,要得編譯Google Test的library,以Visual Studio來說,開啟它的.sln檔,然後編譯就可以了
接著是如何使用Google Test? 雖然有點小麻煩,但其實也還好,首先include 『gtest/gtest.h』,接著是lib的設定,因為Google Test的lib是使用/MT參數進行編譯,所以你的專案也一樣要設為/MT或/MTd(Debug 模式下使用),然後link gtest.lib就可以了,如果不這樣做,你會看見一大堆xxx aleardy defined in xxx的link錯誤
而我用Code Blocks似乎因為編譯參數不太一樣又遇到一堆link錯誤,後來發現好像是Code Blocks的Console Application專案一開始就link的msvcrtd.lib一系列.lib所造成的,將那些移除只剩gtest.lib或gtestd.lib就可以正確執行,我隨手從它的範例裡組合出一個測試的執行檔
#include
#include
using namespace std;
// Returns n! (the factorial of n). For negative n, n! is defined to be 1.
int Factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// Returns true iff n is a prime number.
bool IsPrime(int n) {
// Trivial case 1: small numbers
if (n <= 1) return false;
// Trivial case 2: even numbers
if (n % 2 == 0) return n == 2;
// Now, we have that n is odd and n >= 3.
// Try to divide n by every odd number i, starting from 3
for (int i = 3; ; i += 2) {
// We only have to try i up to the squre root of n
if (i > n/i) break;
// Now, we have i <= n/i < n.
// If n is divisible by i, n is not prime.
if (n % i == 0) return false;
}
// n has no integer factor in the range (1, n), and thus is prime.
return true;
}
// Step 2. Use the TEST macro to define your tests.
//
// TEST has two parameters: the test case name and the test name.
// After using the macro, you should define your test logic between a
// pair of braces. You can use a bunch of macros to indicate the
// success or failure of a test. EXPECT_TRUE and EXPECT_EQ are
// examples of such macros. For a complete list, see gtest.h.
//
//
//
// In Google Test, tests are grouped into test cases. This is how we
// keep test code organized. You should put logically related tests
// into the same test case.
//
// The test case name and the test name should both be valid C++
// identifiers. And you should not use underscore (_) in the names.
//
// Google Test guarantees that each test you define is run exactly
// once, but it makes no guarantee on the order the tests are
// executed. Therefore, you should write your tests in such a way
// that their results don't depend on their order.
//
//
// Tests Factorial().
// Tests factorial of negative numbers.
TEST(FactorialTest, Negative) {
// This test is named "Negative", and belongs to the "FactorialTest"
// test case.
EXPECT_EQ(1, Factorial(-5));
EXPECT_EQ(1, Factorial(-1));
EXPECT_TRUE(Factorial(-10) > 0);
//
//
// EXPECT_EQ(expected, actual) is the same as
//
// EXPECT_TRUE((expected) == (actual))
//
// except that it will print both the expected value and the actual
// value when the assertion fails. This is very helpful for
// debugging. Therefore in this case EXPECT_EQ is preferred.
//
// On the other hand, EXPECT_TRUE accepts any Boolean expression,
// and is thus more general.
//
//
}
// Tests factorial of 0.
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
// Tests factorial of positive numbers.
TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}
// Tests IsPrime()
// Tests negative input.
TEST(IsPrimeTest, Negative) {
// This test belongs to the IsPrimeTest test case.
EXPECT_FALSE(IsPrime(-1));
EXPECT_FALSE(IsPrime(-2));
EXPECT_FALSE(IsPrime(INT_MIN));
}
// Tests some trivial cases.
TEST(IsPrimeTest, Trivial) {
EXPECT_FALSE(IsPrime(0));
EXPECT_FALSE(IsPrime(1));
EXPECT_TRUE(IsPrime(2));
EXPECT_TRUE(IsPrime(3));
}
// Tests positive input.
TEST(IsPrimeTest, Positive) {
EXPECT_FALSE(IsPrime(4));
EXPECT_TRUE(IsPrime(5));
EXPECT_FALSE(IsPrime(6));
EXPECT_TRUE(IsPrime(23));
}
int main(int argc, char** argv) {
// Prints elapsed time by default.
//testing::GTEST_FLAG(print_time) = true;
// This allows the user to override the flag on the command line.
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
很簡單明瞭吧? 然後它執行的結果畫面如下
沒想到還有顏色,看起來蠻酷的對吧,很酷有時候也是選擇專案的理由之一,在這樣試玩下來,雖然還沒深入研究,還有實際寫Unit Test,但是感覺起來真的很不錯,有興趣的人可以試一試
今天在找比Boost.Test更好用的Unit Ttest Framework時,在看Google Unit Test Framework時,無意間發現了Google的程式風格指南,裡面有C++的程式風格指南,我看了一下覺得還蠻有參考價值的,他們不是沒有理由的規定編程的風格,每條理由都有清楚寫出優點、缺點、甚至討論等等,做為決定團隊程式語言風格的指南決定,或是看他們決定的理由,都很有幫助
學寫C++的人可以參考看看
註 : 每個條目要按一個向下的三角形會展開細節,優缺點和討論等等