2013年11月28日木曜日
2013年11月27日水曜日
Visual Studio Express で、 NUnitを使う
もう出尽くした感のあるネタだが、ネットで良い方法を見つけたのでメモしておく。
まず、テストプロジェクトの出力の種類を「Windowsアプリケーション」にする。
(通常のテストプロジェクトは、「クラスライブラリ」である)
そして、ダミーのエントリーポイントを追加する。
テストプロジェクトを、スタートアッププロジェクトに設定してRunすると、見慣れたテストランナーが起動する!
テストコード内でブレークポイントも使える。
GUIが目障りな場合は、出力ウィンドウに結果のみ表示させることもできる。
テストプロジェクトの出力の種類を「コンソールアプリケーション」にして、エントリーポイントを以下のようにする。
出力ウィンドウに結果が。
テストランナーのDLLは、NuGetでNUnit.Runnersでインストールできる。
ソリューションフォルダ以下、packages\NUnit.Runners.2.6.3\tools\lib にある。
まず、テストプロジェクトの出力の種類を「Windowsアプリケーション」にする。
(通常のテストプロジェクトは、「クラスライブラリ」である)
そして、ダミーのエントリーポイントを追加する。
// 参照設定にnunit-gui-runner.dllを追加 public class NUnitTestRunner { [STAThread] static void Main(string[] args) { NUnit.Gui.AppEntry.Main( new string[] { Application.ExecutablePath, "/run"}); } }
テストプロジェクトを、スタートアッププロジェクトに設定してRunすると、見慣れたテストランナーが起動する!
テストコード内でブレークポイントも使える。
GUIが目障りな場合は、出力ウィンドウに結果のみ表示させることもできる。
テストプロジェクトの出力の種類を「コンソールアプリケーション」にして、エントリーポイントを以下のようにする。
// 参照設定にnunit-console-runner.dllを追加 public class NUnitTestRunner { [STAThread] static void Main(string[] args) { NUnit.ConsoleRunner.Runner.Main( new string[] { Assembly.GetEntryAssembly().Location }); } }
出力ウィンドウに結果が。
################################ UNIT TESTS ################################ Running tests in 'C:\Users\xxx\Desktop\NUnitExample\NUnitTest\bin\Debug\NUnitTest.EXE'... スレッド 0x1580 はコード 259 (0x103) で終了しました。 ############################################################################ ############## S U C C E S S ################# ############################################################################ Executed tests : 1 Ignored tests : 0 Failed tests : 0 Unhandled exceptions : 0 Total time : 0.0203104881145478 seconds ############################################################################
テストランナーのDLLは、NuGetでNUnit.Runnersでインストールできる。
ソリューションフォルダ以下、packages\NUnit.Runners.2.6.3\tools\lib にある。
<xml version="1.0" encoding="utf-8"?> <packages> <package id="NUnit" version="2.6.3" targetFramework="net45" /> <package id="NUnit.Runners" version="2.6.3" /> </packages>
2013年11月26日火曜日
jenkins氏をwindowsに招待する (v1.540限定情報)
と思ったら、公式サイトのWindows版が動かない。
8.1でもXPでも7でも動かない。
ファイヤーウォールをOFFにしても動かない。
インストール直後にIEが起動し、http://localhost:8080にアクセスするのだが、応答がない。
かなり退廃的だが、ひとつ前のバージョンなら動くようだ。
普通にインストーラからインストールして、ひとつまえ(v1.539)のjenkins.warを上書きするだけ。(thx情報提供ysさん)
2013/11/25 ver 1.541も動かない・・・
2014/03/18 動くようになっていました。
8.1でもXPでも7でも動かない。
ファイヤーウォールをOFFにしても動かない。
インストール直後にIEが起動し、http://localhost:8080にアクセスするのだが、応答がない。
かなり退廃的だが、ひとつ前のバージョンなら動くようだ。
普通にインストーラからインストールして、ひとつまえ(v1.539)のjenkins.warを上書きするだけ。(thx情報提供ysさん)
2013/11/25 ver 1.541も動かない・・・
2014/03/18 動くようになっていました。
2013年11月15日金曜日
C#のデバッグに便利な属性
DebuggerDisplay属性は結構昔からあるが、表示内容のカスタマイズができなくて不便だった。それを打破する方法を見つけた。
ダブルクォーテーションにエスケープ文字をつけるのがポイントである。これで、ToStringにより表示形式を変更できる。ちなみに中括弧はエラーになるので、String.Formatは使えない。また、@文字列も使えない。
年齢が16進数になっているところに注目!
ToStringをオーバーライドすればいいんだけどね・・・
[DebuggerDisplay("なまえ={Name}, ねんれい={Age.ToString(\"X\")}")]
public class Example { [DebuggerDisplay("非公開", Name = "名前")] public string Name { get; set; } [DebuggerDisplay("非公開", Name = "年齢")] public int Age { get; set; } [DebuggerStepThrough] public Example() { this.Name = "未定";
this.Age = 255;
} }
ダブルクォーテーションにエスケープ文字をつけるのがポイントである。これで、ToStringにより表示形式を変更できる。ちなみに中括弧はエラーになるので、String.Formatは使えない。また、@文字列も使えない。
年齢が16進数になっているところに注目!
ToStringをオーバーライドすればいいんだけどね・・・
2013年11月14日木曜日
C#で契約プログラミング
NetFramework4で契約プログラミングがサポートされたのは知っていたが、高価なVisualStudioだけかと思っていた。ところがプロ版でも使えるということを知ったので、実験してみた。
まずVisualStudioに、拡張機能を追加する。
そして、コンソールアプリケーションを新規作成する。
まずVisualStudioに、拡張機能を追加する。
そして、コンソールアプリケーションを新規作成する。
using System.Diagnostics.Contracts; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int a = 3; int b = 2; Console.WriteLine("{0} / {1} = {2}", a, b, Program.Div(a, b)); Console.ReadLine(); } public static int Div(int a, int b) { Contract.Requires(b != 0); // 入力の契約 Contract.Ensures(Contract.Result() >= 0); // 出力の契約 return a / b; } } }
プロジェクトのプロパティに、見慣れないものが??
わざとb=0にしてコンパイルすると・・・
実行しなくても、ちゃんと契約違反を見つけてくれる!
面白い機能なのだが、漫坊的には採用NGの判定となった。
ExpressEditionでビルドができて、MSBuildで自動化ができるようになったら、再び検討してみるつもりである。
わざとb=0にしてコンパイルすると・・・
static void Main(string[] args) { int a = 3; int b = 0; Console.WriteLine("{0} / {1} = {2}", a, b, Program.Div(a, b)); Console.ReadLine(); }
実行しなくても、ちゃんと契約違反を見つけてくれる!
面白い機能なのだが、漫坊的には採用NGの判定となった。
- ExpressEditionでコンパイルできない
べつに拡張機能が使えるようにしろよ、とか言うつもりはないが、開発関係者全員がプロ版を使えるわけではないので、これは痛い。
ソースの関連行が無効になってくれたらよいのだが。 - 重い
こんな小さなソースでも、7秒くらいかかる。まるでVS2012のWPFデバッグ開始みたいだ。とても毎回実行したいと思わない。
ExpressEditionでビルドができて、MSBuildで自動化ができるようになったら、再び検討してみるつもりである。
2013年11月13日水曜日
VB6でマルチキャストイベントの実験
VBにもイベント機構が存在しているが、イベントリスナーが複数の時、どのような動きをするのだろうか? というわけで、実験してみた。
まず、イベントを持つクラスを作る。(以下、イベントクラス)
Invokeメソッドを呼ぶと、イベントを発動するだけのクラスである。
MainFormは、イベントクラスのインスタンスを持っている。MainFormもイベントを購読している。
CreateSubFormボタンを押すとSubFormを作り、イベントクラスの参照を渡す。SubFormのRaiseボタンを呼ぶと、イベントクラスのInvokeを呼ぶ。
しかし、いまのところ使い道が思い浮かばない・・・
以下は、フォームのソースコード
まず、イベントを持つクラスを作る。(以下、イベントクラス)
Invokeメソッドを呼ぶと、イベントを発動するだけのクラスである。
Option Explicit 'イベントハンドラ Public Event Hello(message As String) 'イベント発動のためのメソッド Public Sub Invoke() RaiseEvent Hello(DateTime.Now) End Sub
MainFormは、イベントクラスのインスタンスを持っている。MainFormもイベントを購読している。
CreateSubFormボタンを押すとSubFormを作り、イベントクラスの参照を渡す。SubFormのRaiseボタンを呼ぶと、イベントクラスのInvokeを呼ぶ。
すべてのイベントハンドラが呼ばれた!
以下は、フォームのソースコード
Option Explicit 'イベントを持つクラス Public WithEvents ObjWithEvent As ClassWithEvent 'イベントハンドラに相当 Private Sub ObjWithEvent_Hello(message As String) Me.Caption = message End Sub 'クラスにイベント発動を依頼 Private Sub RaiseButton_Click() ObjWithEvent.Invoke End Sub 'コンストラクタの代わり Public Sub Init(obj As ClassWithEvent) Set ObjWithEvent = obj End Sub
Option Explicit 'イベントを持つクラス Public WithEvents ObjWithEvent As ClassWithEvent 'フォームを並べて表示するのに使用 Private lastTop As Long 'イベントハンドラに相当 Private Sub ObjWithEvent_Hello(message As String) Me.Caption = message End Sub 'サブフォームを作る Private Sub SubFormCreateButton_Click() Dim Form As New SubForm Call Form.Init(ObjWithEvent) Form.Left = Me.Left Form.Top = lastTop Form.Show lastTop = Form.Top + Form.Height '縦に並べる End Sub 'アプリ強制終了 Private Sub ExitButton_Click() End End Sub 'フォーム初期化 Private Sub Form_Load() Set ObjWithEvent = New ClassWithEvent lastTop = Me.Top + Me.Height End Sub
2013年9月18日水曜日
C#でスクリプト言語 lua を 使う
luaはグーグル先生に聞けばよいのだが、
C# 5.0 (NetFramework4.5) で使うとなると、
途端に情報が少なくなる。
古い情報ばかりで、NetFrameworkを2.0や3.5で使っている。
というわけで、
VisualStudio 2012とNetFramework 4.5で、
LuaInterfaceを使う方法である。
App.configのstartup要素に、
useLegacyV2RuntimeActivationPolicy属性を追加する。
http://msdn.microsoft.com/ja-jp/library/vstudio/bbx34a2h.aspx
例
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
</configuration>
C# 5.0 (NetFramework4.5) で使うとなると、
途端に情報が少なくなる。
古い情報ばかりで、NetFrameworkを2.0や3.5で使っている。
というわけで、
VisualStudio 2012とNetFramework 4.5で、
LuaInterfaceを使う方法である。
App.configのstartup要素に、
useLegacyV2RuntimeActivationPolicy属性を追加する。
http://msdn.microsoft.com/ja-jp/library/vstudio/bbx34a2h.aspx
例
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
</configuration>
2013年7月26日金曜日
2013年6月7日金曜日
翻訳してくれる! Resource Translator (VisualStudio2012拡張機能)
リソースを、自動で翻訳してくれるアドオン見つけた
http://visualstudiogallery.msdn.microsoft.com/c23de518-d3bc-4b1a-a8d8-6ce43fdb2ff4?SRC=VSIDE
使い方
2014/06/16 VisualStudio2013だとインスコできぬ orz
http://visualstudiogallery.msdn.microsoft.com/c23de518-d3bc-4b1a-a8d8-6ce43fdb2ff4?SRC=VSIDE
使い方
プログラムの文字列をリソースへ
ソリューションエクスプローラで、リソースファイルを右クリックして、
「Translate with Microsoft Translator」を選択する
ダイアログで、翻訳する言語を選択する。
一回目は、Create a new file... にチェックを入れる。
※変換もとをAutoDetectにすると、うまく認識されなかったよ。
しばし待つと、英語のリソースができた
このとおり!Saveのアクセラレータキーが化けているけどね。
中国語とか
ロシア語とか
いろいろな言語が選べる
どうせ他の言語はわからないし、ゼロから始めるよりはいいでしょ。
2014/06/16 VisualStudio2013だとインスコできぬ orz
2013年5月11日土曜日
サーバーを借りてみた(4) ローカルとのファイルのやりとり
サーバとのファイルのやりとりをする場合FTPとか使うんだけど、
環境構築前なので、ServerManを使ってみた。
ServerManが有効かどうか調べる(情報画面)
有効でない場合は、、、
ファイルマネージャ画面(情報画面にリンクが有る)
ファイルは、/var/serverman/htdocs/MyStrageにある。
ただし/varなので、シャットダウンすると消える
サーバーを借りてみた(3) 別にUNIXer目指すわけじゃないので
まずはMidnightCommanderのインスコ
yum install mc
これで、フォルダ移動が、劇的に楽になる。
いちいちキータイプしてられねぇよ
vi使わなくても、設定ファイルの書き換えができるよ
2013年5月9日木曜日
登録:
投稿 (Atom)