VSS 1.6.1 プラグイン 日本語化情報

2007. 4. 16. 15:19

VSS 1.6.1 プラグイン 日本語化情報
インストール後に、プラグインフォルダへコピーした内容から

plugin.properties の内容を以下のように日本語へ変換し、Shift-JISで保存。


pluginName=VSS Plugin Functions for Eclipse

GroupMenu.label=チーム
decoratorStandard.name=VSS Plugin Team Decorator
decoratorStandard.description=Label Decorator for VSS Plugin. Enable this to show known status (checked in, checked out, and so on) of each VSS managed file/folder. Further information found in release notes.

wizard.name=VSS コンフィグレーション ウィザード
wizard.description=VSSが管理するプロジェクトを他のメンバーと共に共有することが出来ます。
propertypage.name=VSS 構成
propertypage.mappings.name=VSS マッピング
propertypage.vssinfo.name=VSS 情報
preferencePage.name=VSS

put.name=保存
put.tooltip=リソース関連を VSS の保存場所 (URI) に保存します
get.name=最新のバージョンを取得
get.tooltip=VSS の保存場所(URI)からリソースを取得します
getLabel.name=ラベルを指定して取得...
getLabel.tooltip=VSS の保存場所(URI)からラベルのリソースを取得します
checkin.name=チェックイン
checkin.tooltip=新しいバージョンでVSSリソースを更新します
checkout.name=チェックアウト
checkout.tooltip=VSSで制御されたリソース関連の変更を許可します
undoCheckout.name=チェックアウトの取り消し
undoCheckout.tooltip=チェックアウトを取り消し、VSSリソースのチェックアウト状態を回復します
deconfigure.name=共有を解除
deconfigure.tooltip=このプロジェクトから共有を解除します
label.name=ラベル...
label.tooltip=ラベルをセットまたは移動または取り消しします
baseline.name=ベースライン コントロール...
baseline.tooltip=リソース構成の永続性スナップショットを作成します
refresh.tooltip=VSSデータベースのすべてのファイル状態を更新します。
refresh.name=更新
add.tooltip=VSSデータベースへ追加します
add.name=ファイルの追加
compare.name=最新と比較...
compare.tooltip=最新であるか比較します
delete.tooltip=VSSデータベースからファイルを削除します
delete.name=ファイルの削除
deconfigureProject.label=VSS 構成の解除
deconfigureProject.tooltip=VSS 構成を解除します
compareWithRemoteAction.label=VSS バージョン...
compareWithRemoteAction.tooltip=VSS バージョンと比較します
replaceWithRemoteAction.label=VSS バージョン...
replaceWithRemoteAction.tooltip=VSS バージョンに置き換えます
updateState.name=状態更新
updateState.tooltip=状態を更新します。
compareWithLatestRemoteAction.label=VSS 資源から最新のもの...
compareWithLatestRemoteAction.tooltip=VSS 資源から最新のもの...
merge.name=最新とマージ...
merge.tooltip=最新バージョンとマージします
commit.name=変更のコミット
commit.tooltip=すべての変更をコミットします

vssTreeView.show=VSS ブラウザの表示
vssTreeView.tooltop=VSS ブラウザの表示
sync.name=資源と同期...
sync.tooltip=資源と同期...

markAsOnlineProject.label=VSS オンライン
markAsOnlineProject.tooltip=VSS に接続します

markAsOfflineProject.label=VSS オフライン
markAsOfflineProject.tooltip=VSS と切り離します

unsetReadOnly.label=読み取り専用を解除
unsetReadOnly.tooltip=読み取り専用を解除します

setReadOnly.label=読み取り専用に設定
setReadOnly.tooltip=読み取り専用に設定します

viewCheckedOutFiles.name=チェックアウトされたファイルの一覧
viewBrowser.name=VSS ブラウザ
viewRefreshLog.name=VSS 更新ログ


messages.properties も同じように。

fileSystem.propertyLocation=Location:

wizardPage.name=VSS データベース設定を選択
wizardPage.description=特定のVSSデータベースを選択してください
wizard.title=VSS プロジェクトの割り当て

wizard.browseDataDir=&B 参照...
wizard.vssDataDir=VSS ディレクトリ:
wizard.userName=ユーザー名:
wizard.password=パスワード:
wizard.vssMountPoint=VSS データベース保存場所:
wizard.browseSourceDir=&s 参照...
wizard.sourceMountPoint=ソース 保存場所:
wizard.browseVSSDir=&r 参照...

# Error messages
wizard.notValidDataDirLocation=データディレクトリ位置が有効ではありません
wizard.noUsername=ユーザ名が指定されていません
wizard.noMountPoint=データベース保存場所が指定されていません
wizard.noValidSourceMountPoint=ローカルのプロジェクトフォルダが見つかりません
wizard.noSourceMountPoint=ソースの保存場所は、ローカルに存在するプロジェクトフォルダーを指定してください

preference.NoVssInstallationFound=有効な VSSデータベース が見つかりません\nまたは、VSSデータベースが壊れています
wizard.generalError=VSS データベースにアクセスする時に予期せぬエラーが発生しました\nユーザ名、パスワード、VSSデータベースが正しいか確認してください

Config.error=プロバイダーの構成でエラーが発生しました
Config.vssError=VSS プラグイン プロバイダーが 作成できません

error.general=一般的なエラー
error.save=ファイル {0} を保存することが出来ません
checkout.error={0} をチェックアウトする際にエラーが発生しました

projectSet.noProject.title=プロジェクトではありません
projectSet.noProject.noMappingFound={0} はプロジェクトではありません。ワークスペースとプロジェクトルート マッピングを設定してください。{1} を設定してください。 {2}を作成してください。\n( No project with name {0} found in workspace and project root mapping found for {1}. Please create a project with name {2}. )
projectSet.noProject.noDescrptionFound=プロジェクト {0} が無いため、ワークスペース上のどのプロジェクトでも記述がVSSで {1} が見つかりません。 VSSデータベースへプロジェクト {2} を作成するか、プロジェクト記述ファイル(.project, .classpath)を追加してください。\n(No project with name {0} found in workspace and no project description file {1} found in VSS. Please create a project with name {2} or add the project description files (.project, .classpath) to your VSS database.)

projectSet.alreadyConfigured.title=プロジェクトは既に構成されています
projectSet.alreadyConfigured.message=プロジェクト {0} は VSSデータベースで既に構成されています\n( Project {0} is already configured to a VSS-database )

projectSet.askRefresh.title=すべてのプロジェクトを更新しますか?
projectSet.askRefresh.message=プロジェクト {0} の構成に成功しました。プロジェクトすべてを更新しますか?\n( Project {0} successfully configured. Do a full refresh of project? )

projectSet.askLabelRefresh.title=プロジェクトのラベル {0} を使用して更新しますか?\n( Do a refresh using label {0} of project? )
projectSet.askLabelRefresh.message=プロジェクト {0} の構成に成功しました。プロジェクトのラベル {1} を使用して更新しますか?( Project {0} successfully configured. Do a refresh using label {1} of project? )

projectSet.cannotCreate.title=プロジェクト構成
projectSet.cannotCreate.message=プロジェクト {0} の構成に成功しました。\n( Project {0} sucessfully configured. )

projectSet.exportUserName.title=エクスポート オプション
projectSet.exportUserName.message=プロジェクト {0} から チーム プロジェクトとエクスポートオプションを設定してください。 \n( Set Team Project Set export options for project {0} )

projectSet.credentials.title=ユーザ名とパスワードの入力
projectSet.credentials.message=ユーザ名とパスワードを入力してください
projectSet.credentials.messageLong=プロジェクト {0} のチームプロジェクトにおけるユーザ名が不正です。\nユーザ名とパスワードを入力してください。\n( Missing username in Team Project Set export file\nfor project {0}. Please enter a username and password. )
 
projectSet.askCreateAndRefresh.title=プロジェクト構成が見つかりました
projectSet.askCreateAndRefresh.message=プロジェクト構成ファイル( {0} )がVSSで見つかりました。ワークスペースにプロジェクト {1} を作成し、すべて更新しますか?\n( A project configuration file ({0}) has been found in the VSS. Do you want to use it to create project {1} in the workspace and do a full refresh? )

goto.errorMessage.message=リソース {0} の開始時にエディタの内部でエラーが発生しました。\n(Error opening resource {0} in editor. )
goto.errorMessage.title=リソースの開始でエラー発生

teamStatus.notCheckedOut=チェックアウトされていません。
teamStatus.notCheckedIn=チェックインされていません。
teamStatus.unmanagedResource=リソース管理外です。
teamStatus.noRemoteResource=リモートリソースは存在しません。
teamStatus.ioFailed=I/Oエラーが発生しました。
teamStatus.conflict=矛盾が発生しました。
provider.configuration.missing=必要な構成が欠けています。
provider.configuration.invalid=構成の値が無効です。
provider.resourcepath.not.vithin.vss.managed.path=パス {0} はVSSで管理された場所ではありません。
provider.path.error=選択された経路は有効ではありません。
provider.vssDataDir.notFound=VSS パス {0} を読み込めません。 データベースに接続されていないか読み取れません。 Error: {1}.

filetransfer.monitor={0} ({1}K of {2}K bytes)
multiStatus.errorsOccurred=エラーが発生しました。
internalError=内部エラーが発生しました。バグの可能性があります\n( An internal error occured. Perhaps a bug? )
status.errorsOccurred=エラーが発生しました。

## Progress bar titles.
refreshAction.updating=更新中...
refreshAction.title=VSSデータベースから状態を更新しています。
addAction.add=追加中...
addAction.title=VSSデータベースからファイルを追加しています。
gettingFiles=取得中
gettingDir=ディレクトリ {0} とサブディレクトリ.
gettingFile=ファイル {0}
gettingFiles.title=取得中
gettingFileVersion=ファイル {0} of version {1}
checkingOut=ファイルのチェックアウト中
checkingOut.title=チェックアウト
checkingIn=ファイルのチェックイン中
checkingIn.title=チェックイン
undoCheckout=チェックアウトファイルの取り消し
undoCheckout.title=チェックアウト取り消し
delete=ファイルの削除中
delete.title=削除
updateStatus=ステータス更新中
adding=ファイル追加中
adding.title=追加
moving=移動中
delete.promptTitle=ファイルを削除しますか?
delete.promptMessage=本当に削除してもよろしいですか?
deconfigureProject=構成解除
deconfigureProject.title=VSSマッピングの構成を解除します。

refresh.menu=更新
checkIn.menu=チェックイン
undoCheckOut.menu=チェックアウト取り消し
compare.menu=VSS ヴァージョンと比較...
merge.menu=最新状態とマージ...

commit=すべての変更をコミット
commit.title=変更をコミット

deconfig.error=Error
deconfig.errorMessage=VSS構成を解除するときにエラーが発生しました

authentication.error=コマンド {0} で VSSに認証することが出来ません。ユーザ名かパスワード間違っている可能性があります。( Unable to authenticate to VSS with command {0}. Probably wrong password or username. )
authentication.error.message=VSS に認証することが出来ません。ユーザ名かパスワードが間違っている可能性があります。( Unable to authenticate to VSS. Probably wrong password or username. )

predefinedIgnores=*.class, *.scc, .project, .classpath

noConfiguration.title=VSSプラグインの構成はプロジェクト {0} に有効ではありません。( No VSS Plugin configuration found for project {0} )
noConfiguration.message=VSSプラグインの構成はプロジェクト {0} に有効ではありません。共有されないようにプロジェクトをリセットします。( No VSS Plugin configuration found for project {0}. Resetting project as unshared. )
errorRemovingConfiguration.message=プロジェクト {0} を共有できません。( Unable to unshare the project {0}.)\n org.vssplugin.core.VSSPluginProviderを .project ファイルから手動で取り除いて再構成してください。( Remove the nature org.vssplugin.core.VSSPluginProvider manually from the .project file and reconfigure. )

deleteFileFromVSS.title=VSSからファイルを削除
deleteFileFromVSS.question=ファイル {0} を削除しようとしています。\n VSSのファイルも同時に削除しますか?
deleteFolderFromVSS.title=VSSからフォルダ削除
deleteFolderFromVSS.question=フォルダ {0} を削除しようとしています。\n VSSのフォルダ(内部ファイル含む)も同時に削除しますか?( About to delete the folder {0} locally. Do you want to do a recursive delete of all files in VSS also? )

moveFileInVSS.title=VSSファイル移動
moveFileInVSS.question=ファイル {0} を {1} へ移動しようとしています。すべてのファイル・ヒストリが失われる可能性があります。( Do you want to move the file {0} to {1} in the VSS? Please note that all file history might be lost.)
moveFolderInVSS.title=VSSフォルダ移動
moveFolderInVSS.question=フォルダ {0} を {1} へ移動しますか?

resouceNotExists.title=リソースが見つかりません
resouceNotExists.message=リソース {0} が VSS上に見つかりません. {1} を移動することが出来ません.

FileModificationValidator.ok=Ok
FileModificationValidator.checkoutFile.title=ファイルをチェックアウトしますか?
FileModificationValidator.checkoutFile.question=ファイル {0} を変更するために、チェックアウトしますか?
FileModificationValidator.fileIsReadOnly=ファイル {0} は読み取り専用です!
FileModificationValidator.someReadOnly=いくつかのファイルは書込み禁止になっています!

FileModificationValidator.offline.title=読み取り専用を解除しますか?
FileModificationValidator.offline.question=ファイル {0} は VSS によって扱わなければなりません, (VSSは現在、オフラインです).\n それでも読み取り専用を解除しますか?

FileModificationValidator.unsetreadonly.title=読み取り専用を解除?
FileModificationValidator.unsetreadonly.question=ファイル {0} は読み取り専用です。 読み取り専用を解除しますか?

compareError.title=比較失敗
compareError.message=ファイル {0} の比較に失敗しました

noHistory.title=履歴はありません
noHistory.message=ファイル {0} の履歴が無いため、比較は行いません。

comment.title=コメント
comment.message.file= {0} のコメントを入力してください
comment.message.folder= {0} のコメントを入力してください\n(同じコメントは再帰的に使用されます)
recursive.title=再帰 {0}
recursive.message={0} を再帰的に実行しますか?

sameComment.toolTip=これをチェックすると、選択されたすべてのリソースに同じコメントを使用します
commentDialog.sameComment.text=&A すべてのリソースに同じコメントを適用します:
commentDialog.keepCheckedOut.text=&K チェックアウトを保持します:
commentDialog.keepCheckedOut.tooltip=チェックアウト状態を保持したままチェックインします.


wizardMapping.title=マッピング追加
wizardMapping.description=ローカルフォルダーとvssフォルダーをマッピングしてください。 最低1つのマッピングが存在しなければなりません。 ローカルフォルダには1つのマッピングだけ設定できます\n( Add mappings between local folders and vss folders. At least one mapping must exist and only one mapping per local folder. )
settingNature.error=プロジェクトにVSSプラグインの nature を設定するときにエラーが発生しました。.projectファイルが読み取り専用になっていないか確認してください\n(An error occured when setting vssplugin nature for project. Perhaps the .project file is readonly?)

getLabel.progress=ラベルバージョンの取得
getLabel.title=ラベルバージョン取得
getLabel.message=ラベルの名前を入力してください。 現在のファイルは上書きされますのでご注意ください。
getLabel.header=ラベルバージョン {0} を取得します
getLabel.message1=リソース
getLabel.error=ラベルを入力してください
labelNotFound.title=ラベルが見つかりません
labelNotFound.message=ラベル {0} が見つかりません
fileNotFound.error.message=VSSに ファイルまたはフォルダが見つかりません
fileLabelNotFound.error.message=ラベル または ファイル/フォルダが VSS上に見つかりません。
deleteFile.title=ローカルファイルの削除
deleteFile.message={0} は VSS データベースから削除されました。ローカルのファイルを削除しますか?
get.version=ヴァージョンでローカルファイルを置き換えます
compare.with.local=ローカルファイルと比較します

fileChanged.title=ファイルは変更されています
fileChanged.message={0} は変更されています。チェックアウトを取り消し、変更をキャンセルしますか?

fileCheckedOut.title=ファイルはチェックアウトされています
fileCheckedOut.message=ファイル {0} は {1} によってチェックアウトされています

checkoutLocalGet.title=ローカルは最新ではありません
checkoutLocalGet.message=ローカルファイル {0} が最新であるか判断できません。 チェックアウトの時に最新を検索しますか?

undoCheckLocalGet.title=Not Latest Version Locally
undoCheckLocalGet.message=ローカルファイル {0} が最新であるか判断できません。 チェックアウトの取り消し時に最新を検索しますか?

notCheckedOut.title=チェックアウトできません
notCheckedOut.message=ファイル {0} をチェックアウトする事ができません。

noLocalFile.title=ローカルファイルが見つかりません
noLocalFile.message=ローカルファイルが {0} で見つかりません。VSSマッピングが間違っている可能性があります。

writeable.title=書き込み可能なコピーがあります
writeable.message=書き込み可能なコピー {0} は既に存在します。最新を取得し、ローカルファイルを置き換えますか?

fileCheckOutElseWhere.title=ファイルが プロジェクトからチェックアウト出来ません
fileCheckOutElseWhere.message.checkin={0} は {1} からチェックアウト済みです。とにかくチェックインしますか?
fileCheckOutElseWhere.message.undo={0} は {1} からチェックアウト済みです。とにかくチェックインしますか?

checkInManyFile.title=チェックインしますか?
checkInManyFile.message=チェックインしようとしています。1個以上のファイルに影響があります。続行しますか?

checkOutManyFile.title=チェックアウトしますか?
checkOutManyFile.message=チェックアウトしようとしています。1個以上のファイルに影響があります。続行しますか?

deleteManyFile.title=削除しますか?
deleteManyFile.message=削除しようとしています。1個以上のファイルに影響があります。続行しますか?

commitManyFile.title=すべての変更をコミットしますか?
commitManyFile.message=すべての変更をコミットしようとしています。1個以上のファイルに影響があります。続行しますか?

getVersion.action.title=ローカルファイルをバージョンで置き換え
getVersion.action.message=ローカルファイル {0} を VSSのバージョン {1} で置き換えますか?

labelHistory.label=&Lラベル 履歴:
preference.generalSettings=一般
preference.commentsHistory=コメント 履歴
preference.commentsHistory.title=コメント履歴の表示
preference.commentsHistory.list=コメント履歴の一覧
preference.labelsHistory=ラベル 履歴
preference.labelsHistory.title=ラベル履歴の一覧
preference.generalSettingsPlugin=VSSプラグインの一般的な設定:
preference.templates=コメント雛形
preference.showNumCheckedOut=各フォルダでチェックアウトしているファイル数を表示
preference.assumeRecursive=いつも再帰的にフォルダ上の最新版を更新または取得する
preference.moveDeleteHook=内部の移動/削除コマンドと統合する
preference.askComments=チェックインまたは追加時にコメントを入力する
preference.addCommentTemplate=コメント雛形に追加
preference.checkinCommentTemplate=チェックインのコメント雛形を追加
preference.confirmCheckout=チェックアウト取り消しを確認しますか? (ショートカットキーだけに適用)
preference.useStatusUpdater=バックグラウンドで状態を更新します
preference.statusUpdaterIntervall= 分.
preference.statusUpdaterIntervall.error1=更新間隔が有効でない.
preference.statusUpdaterIntervall.error2={0} は更新間隔が有効ではありません。 1から {1}の間で指定します
preference.statusUpdaterIntervall.error3={0} は更新間隔が有効ではありません。
editionDialog.editionLabel=Version {0}
preference.multipleCheckout=VSS 資源で 複数のチェックアウトをサポートします

preference.askCheckOutComments=チェックアウト時にコメントを入力

CheckOutView.image=
CheckOutView.resource=リソース
CheckOutView.user=Checkoutee
CheckOutView.since=Since
CheckOutView.comment=Comment
CheckOutView.version=Version
CheckOutView.inFolder=In Folder
CheckOutView.type=Type

sortByMenu.text=Sort
filterMenu.text=Filter
sort.byResource=By Resource
sort.byFolder=By Folder
sort.byCheckoutee=By Checkoutee
sort.since=By Since
sort.byType=By Type

sort.ascending=昇順
sort.descending=降順

compare.file.message=ローカルの比較ファイルを選択します
compare.file.compare=比較:
compare.file.to=To:
compare.file.browse=&Browse
compare.file.ignoreWS=空白を無視します
compare.file.chooseFile=ファイルを選択してください
compare.file.allFiles=ファイルすべて
compare.file.filter=*.{0}
compare.file.filterName={0}-files (*.{1})
compare.file.compare.toText={0} ({1})

filter.onlyMyCheckouts=自分がチェックアウトしたファイルを表示
filter.onlyOtherCheckouts=他のものがチェックアウトしたファイルを表示

updateStatusAction.updating=状態更新中...
updateStatusAction.title=状態更新

undo.checkout.meny.title=チェックアウト取り消し?
undo.checkout.meny.message=ファイル {0} のチェックアウト取り消しを行いますか?

merge.local.file=ローカルファイル {0}
merge.latest.version=資源 の 最新バージョン {0}
merge.title=ファイルのマージ
merge.commit.action=&C コミット
merge.saveErrorTitle=保存失敗
merge.saveErrorMessage=保存できません

merge.conflict.title=マージの時に衝突が検出されました
merge.conflict.message=マージで {0} から衝突が検出されました。衝突を解決しチェックインしてください。

VSSTreeView.title=VSS ブラウザ ({0})
VSSFolderSelectionDialog.title=VSS フォルダの選択 ({0})

selectResourceToAdd.title=追加するリソースを選択してください

fetching.members=メンバーの取得中...
compare.resources=リソース {0} 比較中...

editor.action.title=動作が有効でない
editor.action.message=動作 "{0}" はリソース {1} で有効でありません。

renamedFile.comment= {0} から {1} へリネームしました

share.conflict.error={0} は {1} 上で既に存在します。


undoCheckout.revert.title=エディタを元に戻しますか?
undoCheckout.revert.message=エディタは ファイル {0} の内容と一致しません。\n すべての変更をキャンセルし、元に戻しますか?

LatestVersionQuickDiffProvider.fetchingFile=最新バージョン取得中...
LatestVersionQuickDiffProvider.closingFile=ファイルのクローズに失敗.
LatestVersionQuickDiffProvider.readingFile=ファイルの読み込みに失敗.

resource.refresh=Refresh {0}

saveResourcesTitle=リソースを保存しますか?

#
# Used for Sync-actions..
#
checkin.name=チェックイン
undoCheckout.name=チェックアウトの取り消し
refresh.name=更新
add.name=VSSへ追加
delete.name=VSSから削除
commit.name=変更をコミット

# ***********************************************************************************
# Strings from the VSS OLE Interface.. Change these if needed on non-english VSS versions.
# ***********************************************************************************
# vssOlePrgName=SourceSafe
# vssStr.youCurrently=You currently have file
# vssStr.isCurrentlyCheckedOut=is currently checked out by
# vssStr.isNotCheckedout=is not checked out
vssOlePrgName=SourceSafe
vssStr.youCurrently=ファイルが存在します
vssStr.isCurrentlyCheckedOut=チェックアウトされています
vssStr.isNotCheckedout=チェックアウトされていません

 


作成後、JavaのBinフォルダにある native2ascii を利用してコードを変換します。
利用方法.
C:\j2sdk1.4.2_04\bin\native2ascii 元のファイル名 新しいファイル名

元に戻すには
C:\j2sdk1.4.2_04\bin\native2ascii -reverse 元のファイル名 新しいファイル名


message.properties については、 Jarファイルに入れましょ。

コード変換したファイルをプラグインフォルダにコピーします


 

by artis

JUnit을 이용한효율적인테스트전략

2007. 4. 13. 16:08


JUnit을 이용한효율적인테스트전략

http://wiki.javajigi.net/pages/viewpage.action?pageId=278


by artis

junit 使いませ

2007. 4. 13. 14:04

by artis

JUnit으로 테스트 작성하기

2007. 4. 13. 13:59

JUnit으로 테스트 작성하기 

1. 단위 테스트 구조화

■ 테스트에 필요한 모든 조건과 상황을 준비 설정한다.(필요한 객체를 모두 생성하기, 필요한 자원을 모두 할당하기 등)
■ 테스트 대상이 되는 메서드를 호출
■ 테스트 대상이 되는 메서드가 원하는 대로 동작한다는 것을 검증한다.
■ 리팩토링

2. JUnit의 단정 메서드

■ assertEquals
 assertEquals([String message], expected, actual, tolerance)
 
 예) assertEquals("Should be 3 1/3", 3.33, 10.0/3.0, 0.01);
 
■ assertNull
 assertNull([String message], java.lang.Object object)
 
 assertNotNull([String message], java.lang.Object object)
 
 인자로 넘겨받은 객ㄹ체가 null인지(또는 null이 아닌지) 판정하고, 반대인 경우 실패로 처리.

■ assertSame
 assertSame([String message], expected, actual)
 
 assertNotSame([String message], expected, actual)
 
 expected와 actual이 같은 객체를 참조하는지 아닌지를 판정.

■ assertTrue

 assertTrue([String message], boolean condition)
 
 assertFalse([String message], boolean condition)
 
 boolean 조건이 참인지 아닌지 판정

■ fail

 fail([String message])
 
 테스트를 바로 실패처리. 절대 수행되지 않아야 될 부분(예외가 발생되는 부분 다음)을 표시하는데 사용.
 
3. JUnit 프레임워크

import junit.framework.TestCase;

public class LargestTest extends TestCase {
    private Largest largest;
   
    /*
     * 각각의 테스트 메서드들이 실행되기 전에 호출된다.
     */
    protected void setUp() throws Exception {
        largest = new Largest();
    }
   
    /*
     * 각각의 테스트 메서드들이 실행되고 난 다음에 호출된다.
     */
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /*
     * Test method for 'tdd.junit.ch2.Largest.largest(int[])'
     */
    public void testLargest() {
        assertEquals(9, largest.largest(new int[] {9,8,7}));
        assertEquals(-7, largest.largest(new int[] {-9,-8,-7}));
    }
}

4. JUnit 테스트 조합

여러개의 테스트 케이스를 통합한 것을 테스트 스위트(TestSuite)라고 한다. 테스트 스위트를 작성해 두면 여러개의 테스트 케이스를 한 번에 실행시킬 수 있다.

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {
   public static Test suite() {
       TestSuite suite = new TestSuite("Test for tdd.junit");
     
       //$JUnit-BEGIN$
       suite.addTestSuite(TestJukebox.class);
       suite.addTestSuite(TestMyStack.class);
       //$JUnit-END$
     
       return suite;
   }
}

5. JUnit 사용자 정의 단정 메서드

경우에 따라 사용자 정의 단정 메서드를 만들어야 할 경우 작성.

import junit.framework.*;

/**
 * Project-wide base class for Testing
 */
public class ProjectTest extends TestCase {
    /**
     * Assert that the amount of money is an even
     * number of dollars (no cents)
     *
     * @param message Text message to display if the assertion fails
     * @param amount Money object to test
     */
    public void assertEvenDollars(String message, Money amount) {
        assertEquals(message, amount.asDouble() - (int)amount.asDouble(), 0.0, 0.001);
    }

    /**
     * Assert that the amount of money is an even
     * number of dollars (no cents)
     *
     * @param amount Money object to test
     */

    public void assertEvenDollars(Money amount) {
        assertEvenDollars("", amount);
    }
}

이를 사용하기 위해서는 TestCaset를 바로 상속하지 않고 이 기반 클래스를 상속하여 사용.

6. JUnit과 예외

[테스트 메서드내 예외 선언]

public void testForException() {
    try{
        sortMyList(null);
        fail("Should have thrown an exception"); /* 예외발생시 실패 선언 */
    } catch(RuntimeException e) {
        assertTrue(true); /* 성공처리 선언 - "제어 흐름이 반드시 여기를 지나야 한다"는 문서화 역할  */
    }
}

[테스트 메서드 예외 선언]

public void testData1 throws FileNotFoundException {
    FileInputStream in = new FileInputStream("data.txt");   
출처 : Tong - I제로I님의 CVS/Ant/JUnit통

by artis

JUnit

2007. 4. 13. 13:47

JUnit이란  한마디로 테스트 툴이다.  프로그램 테스트할때 사용한다.


class 화일을 테스트를 할때.. 반드시 main() 를 만들어 겉으로만 테스트 하는것은 테스트라
보기 어렵다고 한다.

 대형 프로젝트의 경우 시나리오가 나오고 로직이 나오면 로직의 문제를 테스트하는것을
테스트라 말 할 수 있다고 한다.

JUnit는 이렇게 보이지 않고 숨겨진 단위 테스트를 좀더 수면 위로 끌어올리고 정형화시켜주는
단위 테스트 프레임워크의 자바 구현물이며 1.4버젼에서 추가된 assertXXX를 사용하여
Test를 하더라구요


-- Eclipse에서 사용법

저도 잘 모르지만... 다른것보단 간단하더라구요..

Eclipse 2.1 버전 이상에서는 Junit을 기본으로 사용하고 있어서...

밑에 읽어보시면 알겠지만. ..  classpath를 따로 잡아주지 않아도.

Eclipse 에서는 default 여서 그냥 사용하시면 됩니다.

확인법  : Window->Preferences->Jave->JUnit 모든것을 체크 해주면 됨..


File->NEW->project에서 TestCase, TestSuite가 없으신 분은

Window ->Customize Perspective->File>New에서 찾아서 체크만 해주면 ok


실행은 Run->JUnit

실행하면 왼쪽에 JUnit 창이 뜰것인데.

그쪽에 아무것도 안뜨고 초록 막대가 보이면 Test 성공

에러나면  빨간 막대.. Junit 창에 에러가 쫙~~ 뜹니다.



 밑에 다른 사이트에 퍼온건데 정리가 잘 되어 있더라구요..  도움이 되실꺼예요.



---------------------------------------------------------------------------------------


xp[eXtreme Programming]: 주된작업이 코딩부분에 초점을 두고 있는 경량 개발 방법론

xp의 중심적인 중요사항 :

의사소통(communication), 단순성(simplicity), 피드백(feedback),자신감(courage)에 기초를 한다. 
의사소통은 짝프로그래밍, 작업견해논의, 반복되는 계획을 수월하게 수용할수 있는가에 대한 중요
요소, 단순성은 같은 내용을 과도하게 작성하지 않고 기본에 충실하여 간결한 구조를 처음부터
끝까지 유지하는데에 있다. 피드백은 매우중요하며 코드테스팅, 고객의 요구 사항, 부분적인
반복작업및 여러차례의 결과물인도, 짝프로그래밍/지속적인 코드 검토등의  과정에 의해
이루어진다.
자신감은 문제에 대해 바른 길이 무엇인지 적극적으로 판단하여 리팩토링을 할것인지,
코드를 버릴지, 프로젝트를 중단할지, 품질 요소를 높일 것인지에 대해 결정하는 것에 관한 사항이다.


켄트 벡은 책에서
   열두가지의 중요 실천사항을
말하였는데 계획단계(planning game), 작은 규모 릴리즈
(small releases), 단순한 설계(simple design), testing, 지속적인 통합(continuous integration),
리팩토링(refactoring) ,짝프로그래밍(pair programming), 코드공동소유(collective ownership),
40시간내 해결(40-hour week), 현장 고객 상주(on-site customer) , 메타포(metaphor),
코딩표준(coding standard)이다.

이중에서 자동화된 테스팅과 지속적인 통합을 수행하기위한 툴 사용에 초점을 둔다.

xp는 전체 테스팅을 한주, 한달, 끝날때 가 아닌 매일 하도록 권하고 있다.
통합 테스팅과 기능테스트를 매일 한다면 문제를 조기에 발견 하는 것이 가능할 것이다.

J2EE환경에서는 (시스템이 복잡한 경우가 대부분) 도구를 사용하여 통합 절차가 복잡한
시스템에서 지속적 통합을 위해 통합 절차를 자동화할 필요가 있다.


<<참고 도서: Java Tools for eXtreme Programming >>
==========================================================================

JUnit개요
test case는 일련의 테스트를 실행하기 위한 장치(fixture, 기능, 원시코드경로, 멤버 함수간의
상호작용)을 정의하는 것이다.
        전형적으로 작성한 모든 클래스는 테스트 케이스를 가지고 있어야 한다.

테스트 Fixture는 테스트 수행에 필요한 자원 즉, 프리미티브 변수와 오브젝트를 제공하는 것
        동일하거나 유사한 오브젝트에 대한 테스트가 두개 이상 있을 경우 테스트 환경을 셋업하기
위한 코드를 각 테스트에서 꺼내서 하나의 메소드에 넣어둔다.
        동일한 호나경에서 실행되는 테스트를 위한 설정을 테스트 Fixture라고 한다.

테스트 스위트(test suite) 는 관련된 테스트 케이스를 모아 놓은 것을 말한다.


==========================================================================



 


==========================================================================

<<출처 : http://wiki.tdd.or.kr/ >>

Unit Test
JUnit의 사용법을 말하기 전에 도대체 테스팅이란 무엇인지 그 의미에 대해서 짚고 넘어가자.

테스트는 말 그대로 우리가 만든 프로그램이 원하는 대로 동작하는지 알아보는 것에 불과하다.
그렇다면 우리가 원하는 대로 동작하는지 알 수 있는 방법은 무엇이 있을까?

그것은 단 한가지이다.

기대값과 결과값을 비교한다.

우리가 기대하던 결과를 프로그램이 출력하는지를 살펴 보는것이 테스팅의 기본이고 끝이다.

유닛 테스트는 이러한 기대값과 결과값을 비교한다. TDD[Test Driven Development]는 이러한
유닛 테스트를 기본으로 한다. 다만 테스트의 범위가 매우 작은것이 그 특징이라 할 수 있다.

비행기를 만들고 비행기가 날아가는 것을 보는것도 테스팅이지만 비행기의 부속하나하나 역시
테스트 하지 않던가?
TDD는 비행기를 테스트 하는것이 아니라 비행기의 부속 하나하나를 꼼꼼하게 테스트한다.
그리고 100% 그 테스트를 통과해야 한다.


JUnit 사용법
http://www.junit.org/ 에서 junit.jar파일을 구하고 자바 클래스 패쓰에 다운 받은 jar파일을
설정한다.

그리고 에디터로 다음의 코드를 작성해 보자.

package tddbook;

import junit.framework.TestCase;

public class JUnitTutorialTest extends TestCase {
    public JUnitTutorialTest(String arg0) {
        super(arg0);
    }

    public void testNumber() {
        int expected = 10;
        assertEquals(expected, 2 * 5);
    }

    public static void main(String args[]) {
        junit.textui.TestRunner.run(JUnitTutorialTest.class);
    }
}
이것이 바로 JUnit을 이용한 테스트 코드이다. TestCase를 extends해서 testXXX메써드들을
테스트하고 있다.

위와 같은 모습의 코드가 전형적인 Junit을 이용한 코드의 틀이라고 할 수 있겠다.
위의 testNumber가 실제적인 테스트를 행하는 메써드이며, 이렇게 메써드명이 test로 시작하는
메써드들은 원하는 만큼 많이 만들어서 쓸 수가 있다.

그렇다면 testNumber메써드를 보자. assertEquals라는 TestCase를 통해서 extend받은
메써드를 이용하여 2*5의 결과값이 기대한 값 (expected)와 일치하는지를 비교한다.

위의 코드를 실행하면 다음과 같은 결과를 보게 된다.

.
Time: 0.01

OK (1 test)

자세히 보면 제일 윗줄에 점(.)이 하나 보이는데 이것은 test로 시작하는 메써드들의 갯수
즉, 테스트의 갯수를 의미한단. 다음의 Time은 테스트하는데 소요된 시간을 말하며 OK는 1개의
테스트가 성공했음을 알린다.

이렇듯 text로 그 결과를 보여주는 까닭은 우리가 main메써드에서 junit.textui.TestRunner을
사용했기 때문이며 이 외에도 awt나 swing을 이용한 visual한 결과를 볼 수도 있다.

see also : JunitGui - awt, swing을 이용한 유닛 테스팅

이번에는 테스트가 실패할 경우 어떻게 보여지는지 살펴보도록 하자. 다음과 같이 위의 코드를
수정해 보자.

package tddbook;

import junit.framework.TestCase;

public class JUnitTutorialTest extends TestCase {
    public JUnitTutorialTest(String arg0) {
        super(arg0);
    }

    public void testNumber() {
        int expected = 10;
        assertEquals(expected, 2 * 5);
    }
   
    public void testFailMessage() {
        int expected = 10;
        assertEquals(expected, 3*5);
    }

    public static void main(String args[]) {
        junit.textui.TestRunner.run(JUnitTutorialTest.class);
    }
}

testFailMessage라는 메써드를 추가했다. 코드를 보면 expected는 10이지만 3*5의 값은 10일리
없다.

위의 테스트 코드를 실행하면 다음과 같은 결과를 보게 된다.

..F
Time: 0.01
There was 1 failure:
1) testFailMessage(tddbook.JUnitTutorialTest)junit.framework.AssertionFailedError: expected:<10> but was:<15>
        at tddbook.JUnitTutorialTest.testFailMessage(JUnitTutorialTest.java:17)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at tddbook.JUnitTutorialTest.main(JUnitTutorialTest.java:21)

FAILURES!!!
Tests run: 2,  Failures: 1,  Errors: 0
점 두개는 역시 테스트의 갯수를 말하며 그 옆의 F는 테스트가 실패(Fail)되었음을 말한다.
There was 1 failure: 밑에는 실패한 이유와 trace가 보인다.

우리의 짐작처럼 기대값은 10인데 결과값이 15라서 AssertionFailedError가 발생했음을 알려준다.

마지막 줄은 총 2개의 테스트 중 1개의 Fail이 있고 Error는 0개임을 말한다. 테스트 코드에서
Fail과 Error는 다르다.
Fail은 우리가 테스트한 기대값과 결과값이 다를때 발생하지만 Error는 코드상의 오류나
NullPointerException같은 예측못한 Exception이 발생할 때 생긴다.

setUp & tearDown
setUp - JUnit 테스트 코드의 setUp 메써드는 특별한 의미이다. 주로 코드내에서 사용할 리소스를
초기화 시킬때 setUp을 이용한다.
즉, 각각의 테스트 코드가 항상 new Person()이라는 statement를 실행한다면 이것은 setUp에
선언해서 테스트 매써드가 실행될 때마다 수행하게 할 수 있는 것이다.
다시 말해 setUp은 각각의 testXXX메써드들이 수행되기 바로 직전에 매번 실행되는 것이다.



tearDown - setUp과 반대의 경우라고 생각하면 된다. testXXX매써드가 종료될 때마다 수행되는
매써드이다. 사용한 리소스를 클리어할때 주로 사용된다.

Examples.

package tddbook;

import junit.framework.TestCase;
import java.util.*;

public class TestSetupTearDown extends TestCase {

    public TestSetupTearDown(String arg0) {
        super(arg0);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(TestSetupTearDown.class);
    }
   
    Vector employee;

    protected void setUp() throws Exception {
        employee = new Vector();
    }

    protected void tearDown() throws Exception {
        employee.clear();
    }
   
    public void testAdd() {
        employee.add("Pey");
        assertEquals(1, employee.size());
    }
   
    public void testCleared() {
        assertEquals(0, employee.size());
    }

}


JUnit Useful Methods
JUnit에서 가장 많이 사용되는 메써드는 assertEquals이지만 이 외에도 여러 유용한 메써드들이
있는데 그것에 대해서 알아보기로 하자.

assertTrue(X)
X가 참인지를 테스트한다.

assertFalse(X)
X가 거짓인지를 테스트한다.

assertNull(X)
X가 NULL인지를 테스트한다.

assertNotNull(X)
X가 NULL이 아닌지를 테스트한다.

fail(MSG)
무조건 실패시킨다 (MSG를 출력한다. ) 주로 Exception테스트를 할때 사용된다.


<< 출처 : http://www.yeonsh.com/ >>

JUnit Cookbook
A cookbook for implementing tests with JUnit.


간단한 Test Case
뭔가를 테스트하고 싶을 때 순서:

1. TestCase 클래스의 인스턴스를 만든다.
2. runTest() 메소드를 override한다.
3. 값을 검사하고 싶으면, assert()를 호출해서 테스트가 성공일 때 참이 되는 boolean을 전달한다.


  public void testSimpleAdd() {
      Money m12CHF= new Money(12, "CHF");
      Money m14CHF= new Money(14, "CHF");
      Money expected= new Money(26, "CHF");
      Money result= m12CHF.add(m14CHF);
      assert(expected.equals(result));
  }
 


이미 작성한 테스트와 유사한 테스트를 다시 작성해야 한다면 대신 Fixture를 만든다. 만일 하나
이상의 테스트를 실행해야 한다면 Suite를 만든다.


Fixture
동일하거나 유사한 오브젝트에 대한 테스트가 두개 이상 있을 경우 테스트 환경을 셋업하기 위한
코드를 각 테스트에서 꺼내서 하나의 메소드에 넣어 둔다.
동일한 환경에서 실행되는 테스트를 위한 설정을 Fixture라고 한다.

처음 테스트를 작성할 때는 테스트 자체를 위한 코드보다는 테스트를 위한 환경 설정에 더 많은
시간이 들 것이다. Fixture를 작성해놓으면 다음에 테스트를 작성할 때 시간이 절약될 것이다.

공통 Fixture가 있을 경우 할 일:

1. TestCase 클래스의 서브 클래스를 만든다.
2. Fixture의 각 파트를 위한 인스턴스 변수를 추가한다.
3. setUp()을 override해서 변수를 초기화한다.
4. tearDown()을 override해서 setUp()에서 할당한 자원들을 해제한다.


  public class MoneyTest extends TestCase {
      private Money f12CHF;
      private Money f14CHF;
      private Money f28USD;
   
      protected void setUp() {
          f12CHF= new Money(12, "CHF");
          f14CHF= new Money(14, "CHF");
          f28USD= new Money(28, "USD");
      }
  }
 

Test Case

Suite
TestSuite는 많은 테스트 케이스들을 함께 실행할 수있다.

하나의 테스트 케이스를 실행하는 방법은 아래와 같다.

  TestResult result= (new MoneyTest("testMoneyMoneyBag")).run();
 
두개의 테스트 케이스를 한번에 실행할 때는 아래와 같이 한다.

  TestSuite suite= new TestSuite();
  suite.addTest(new MoneyTest("testMoneyEquals"));
  suite.addTest(new MoneyTest("testSimpleAdd"));
  TestResult result= suite.run();
 


다른 방법은 JUnit으로 하여금 TestCase에서 suite를 추출하도록 하는 것이다.
그렇게 하기 위해서는 TestSuite의 생성자에 테스트 케이스의 클래스를 전달한다.

  TestSuite suite= new TestSuite(MoneyTest.class);
  TestResult result= suite.run();
 
테스트 케이스의 일부만 테스트할 때는 수작업으로 하나씩 지정하는 방법을 사용한다.
그 외의 경우에는 위와 같이 자동 추출되도록 하면 테스트 케이스를 추가할 때마다 지정하지 않아도
되므로 좋다.

TestSuite는 Test Interface를 implement하는 모든 오브젝트를 포함할 수 있다.

  TestSuite suite= new TestSuite();
  suite.addTest(Kent.suite());
  suite.addTest(Erich.suite());
  TestResult result= suite.run();
 

TestRunner
어떻게 테스트를 실행하고 결과를 수집할 것인가? JUnit은 실행할 suite를 정의하고 결과를 표시하기
위한 도구(TestRunner)를 제공한다. test suite를 넘겨주는 static method suite()를 사용하면
TestRunner가 suite에 접근할 수 있다.

예를 들어, TestRunner가 MoneyTest suite를 사용할 수 있게 하려면, 아래와 같은 코드를
MoneyTest에 추가한다

  public static Test suite() {
      TestSuite suite= new TestSuite();
      suite.addTest(new MoneyTest("testMoneyEquals"));
      suite.addTest(new MoneyTest("testSimpleAdd"));
      return suite;
  }
 
만일 TestCase가 suite 메소드를 정의하지 않는다면 TestRunner는 'test'로 시작하는 모든
메소드들을 추출해서 suite를 만들 것이다.

JUnit은 TestRunner 툴의 텍스트 버전과 그래픽 버전을 제공한다. junit.textui.TestRunner는
텍스트 버전이고 junit.ui.TestRunner와 junit.swingui.TestRunner는 그래픽 버전이다.

TestCase 클래스에 main()을 정의해놓으면 직접 TestRunner를 호출할 수도 있다.

  public static void main(String args[]) {
      junit.textui.TestRunner.run(suite());
  }
 
위의 모든 방법으로 테스트가 정상실행되도록 하기 위해서는 CLASSPATH에 junit.jar 파일이 들어
있어야 한다.


출처 : Tong - I제로I님의 CVS/Ant/JUnit통

by artis

junit 사용법

2007. 4. 13. 13:21

통합 테스팅 프레임워크 JUnit | Eclipse 2004/09/20 17:02
http://blog.naver.com/thdusin/100005976306

<<Eclipse의 통합 테스팅 프레임워크 JUnit>>

JUnit은 오픈 소스 테스팅 프레임워크로 플러그인 형식으로 Eclipse에 통합되었다는군요..

 

1. JUnit JAR 파일을 클래스패스에 추가하기

프로젝트 이름에 오른 클릭하고 컨텍스트 메뉴에서 Properties 선택 합니다.

• Properties 대화상자 왼쪽 패널에서 Jaava Build Path 선택하고 오른쪽 Libraries
선택하고 Add Bariables 버튼 클릭합니다.



• New Variable Classpath Entry대화상자에 Configure Variables..버튼 클릭하면
New Variable Entry
대화상자가 열리면  변수 이름과 클래스패스에 Eclipse plugins
디렉토리에 org.junit_3.8.1\junit.jar 입력합니다.
 


 
 
2.  디버깅에 필요한 JUnit 소스 JAR 변수 추가
• New Variable Classpath Entry대화상자에 Configure Variables..버튼 클릭하면
New Variable Entry
대화상자가 열리면  변수 이름과 클래스패스에 Eclipse plugins 디렉토리에 org.eclipse.jdt.source_3.0.0\src\org.junit_3.8.1\junitsrc.zip 입력합니다.
 
 

 

3. 추가된 JUnit 프로젝트의 클래스패스에 추가하고, 디버깅을 위한 JUnit 소스 JAR
연결하기

프로젝트의 New Variable Classpath Entry 대화상자에서 JUNIT 클래스패스 변수를
클릭하고 OK!!

 


 
 



• Properties 대화장사의 Libraries 탭에 추가된 JUnit 항목의 Source attachment
더블클릭하고 JUnit 소스 JAR 클래스 패스 변수를 입력하고 OK 클릭하세요

 


 
 
• JUnit 라이브러리가 Package Explorer 표시됩니다.
 

 
4. JUnit 위저드
테스트하고자 하는 프로그램에 있는 모든 클래스에 테스트 클래스를 하나씩 만드는
가장 쉬운 방법은 JUnit 위저드를 사용하는 것이라는군요
테스트 케이스를 만들고 싶은 파일에 오른클릭하고, 컨텍스트메뉴에서
New > Other
선택하세요
• New 대화상자에서 Java>JUnit>TestCase 선택하고 Next 클릭하세요
 

 
  New JUnit Test Case 대화상에는 폴더, 패키지, 테스트 케이스, 테스트 클래스,
상위 클래스등을 설정 (아래는 기본값을 바꾸지 않고 그대로 수용하고
setup(), teardown()
메소드 스텁을 만드는 옵션만 클릭했습니다.)
 
테스트 케이스에서 사용하려는 목적으로 만든 데이터와 객체를 JUnit에서는 fixture라고
합니다. setUp() 메소드와 teardown() 메소드는 필요할 때마다 픽스처를 설정하고 제거하려는
목적으로 만든 것입니다. 메소드는 테스트 케이스 클래스에 있는 테스트 메소드의
실행 전후에 실행됩니다
테스트하려는 코드와 유닛 테스트를 같은 패키지에 집어넣으면 유닛 테스트가 패키지
접근 권한이 있는 메소드에 접근할 있는 장점이 생긴답니다.
 

 
다음 대화상자에서는 테스트 케이스 클래스와 상위 클래스 Object 메소드를
테스트하는 메소드 스텁을 만드는 옵션이 표시됩니다.
(
테스트 하려는 메소드를 체크합니다.)
 

 
테스트 케이스 클래스 (이름의 끝에 Test 붙은) 생성되었습니다.
 

 
JUnit의 주된 테스트 도구는 하나의 표현식이나 표현식 쌍을
테스트하는데 쓰는 오버로딩된 단정(assertion) 메소드이다.
-         assertEqual(x, Y) : x와 y가 같으면 테스트 통과
-         assertFalse(b) : b가 false이면 테스트 통과
-         assertTrue(b) : b가 true이면 테스트 통과
-         assertNull(o) : 객체 o가 null이면 테스트 통과
-         assertNotNull(o) : 객체 o가 null이 아니면 테스트를 통과
-         assertSame(ox, oy) : ox와 oy가 같은 객체를 참조하고 있으면
테스트를 통과
-         assertNotSame(ox, oy) : ox와 oy가 같은 객체를 참조하고
있지 않으면 통과
5. JUnit Test
테스트 케이스 클래스에 테스트 케이스를 만듭니다.
테스트 케이스 클래스가 에디터 패널이나 Package Explorer 뷰에서
선택하고 메뉴에서 Run>Run As>JUnit Test를 선택합니다.
왼쪽 탭 뷰에 JUnit뷰가 추가 되었으며 모든 유닛 테스트에 성공적으로
통과하면 막대는 녹색으로 나타나고 테스트에 실패하면 붉은색으로
나타나며,
Failure 탭은 실패한 테스트의 목록을 보여줍니다.
 
 

출처 : Tong - babossun님의 JUnit통

by artis

JUnitって?

2007. 4. 13. 10:56

 JUnitはJavaの単体テストツールです。

 プログラムを作成したとき、単に"コンパイルが通った"だけでは完成ではありません。実際にそのプログラムを実行して、期待どおりの動作をすることを確認しなければいけません。動作確認の最もシンプルな方法は、mainメソッドを書いて実行してみることです。

 プログラムはそのときのオブジェクトの状態やメソッドの入力値などに応じて、異なる結果を返したり、例外をスローしたりと、条件によってさまざまに動作します。これらの状況ごとにプログラムを実行し、結果を確認するためのツールがJUnitです。

by artis

Visual SourceSafe を使用した作業

2007. 4. 12. 17:32

Visual Studio .NET と Visual SourceSafe を使用したチーム開発

Visual SourceSafe を使用した作業

.NET による分散アプリケーションの構築

Microsoft Corporation

January 2002
日本語版最終更新日 2002 年 12 月 11 日

概要 : この章では、ソリューションやプロジェクトを Visual SourceSafe に追加する方法、VSS からソリューションを取得する方法、および毎日ファイルをチェックインおよびチェックアウトする方法など、共通の開発作業全体の一連の順を追った手順を提供します。この章により、必要な作業の速度が上ります。

これは、「Visual Studio® .NET と Visual SourceSafe™ を使用したチーム開発ガイド」の第 6 章です。全容を理解するには、こちらをご覧ください。

この章は、以下の開発作業を実行するために、 Microsoft® Visual Studio® .NET が提供する統合ソース管理機能を使用して作業する場合に役立ちます。

  • ソリューションとプロジェクトの作成
  • 既存のソリューションおよびプロジェクトを使用する作業
  • 既存のソリューションへの新しいプロジェクトの追加
  • Microsoft Visual SourceSafe™ (VSS) のソース ファイルのチェックイン
  • プロジェクト、ファイル、およびフォルダの名前の変更と削除

この章では、日常的に行われる一般的な作業のガイドとなる一連の処理を簡単なウォークスルーで紹介します。

注意    この章で説明する手順は、Visual SourceSafe Version 6.0c に適用されます。

Visual Studio .NET は完全に統合された VSS サポートを提供します。Visual Studio .NET は各種 .NET プロジェクトを構成するさまざまな種類のファイルを認識しますので、日常的にプロジェクトやファイルを VSS にチェックイン、またはチェックアウトするときには Visual Studio .NET の使用が不可欠です。ソース管理で自動的に適切なファイルを管理する一方で、ユーザー固有のファイルには影響を与えません。また Visual Studio .NET のソース管理機能は、Visual Studio .NET ソリューション ファイルとプロジェクト ファイルに特定の情報を追加します。VSS エクスプローラを直接使用する場合、この機能は使用されません。

図 6.1 に、開発プロセスのおおまかな概要と、VSS との対話処理で実行する必要のある一般的な 4 つの作業を示します。

図 6.1. VSS との対話処理

図 6.1 に示したように、開発者が定期的に実行する基本的な作業は 4 つあります。以下の作業が必要になります。

  • 新しいソリューションとプロジェクトを作成し、VSS に追加します。
  • 既存のソリューションで 1 回目の作業を行います。
  • 以前に作業した既存のソリューションで作業します。
  • 既存のソリューションに新しいプロジェクトを追加します。

この章では、上記のそれぞれの作業方法以外に、ソース管理を行っている VSS プロジェクト内のプロジェクト、ファイル、およびフォルダの名前の変更や、多重チェックアウト モードでの VSS の使用など、ときどき必要になることがある他の作業の実行方法について説明します。

新しいソリューションやプロジェクトの作成

ここでは、最初からプロジェクトを 1 つ含む新しいソリューションを作成して、このソリューションとプロジェクトを VSS に追加する状況を想定します。 Web プロジェクトと Web 以外の種類のプロジェクトの作成処理、および推奨するフォルダ構造を採用する処理については、第 3 章「ソリューションとプロジェクトの構造化」で説明しています。以下の手順は、指定の構造に従ってソリューションとプロジェクトを作成したことを前提としています。

注意    各プロジェクト ファイルは、ソリューション内でそのプロジェクトを一意に識別する GUID (グローバル一意識別子) を持っています。このため、既存のプロジェクト ファイルをコピーしたり、名前を変更して新しいプロジェクトを作成しないでください。同一の GUID が共有され、 Visual Studio .NET が互いを区別できなくなります。両方のプロジェクトを同じソリューションに含めた場合には問題が発生します。

新しいソリューションを VSS にチェックインする方法

Visual Studio .NET を使用して新しいソリューション ファイルやプロジェクト ファイルを作成した後、および初期開発を終えたときに、そのソリューションとプロジェクトを VSS にチェックインする必要があります。

新しいソリューションをソース管理に追加するには

  1. [ファイル] メニューの [ソース管理] をポイントし、 [ソリューションをソース管理に追加] をクリックします。 ASP.NET Web アプリケーションを VSS に追加する場合は、次のソース管理メッセージ ボックスが表示されます。

  2. [今後このダイアログ ボックスを表示しない] チェック ボックスをオンにして、 [続行] をクリックしてこのダイアログ ボックスを閉じます。
  3. ここで VSS ログイン ダイアログ ボックスが表示される場合があります。これは VSS 管理者がネットワーク ユーザーの自動ログインを使用するように VSS を構成していない場合にのみ表示されます。 VSS ユーザー名を入力して、[参照] をクリックし、 VSS サーバーの VSS データベースに移動します。 VSS サーバーのファイル共有で開発データベースを識別する Srcsafe.ini ファイルを選択します。
    注意 : ネットワーク ユーザーの自動ログインが構成されている場合、 VSS ログイン ダイアログ ボックスは表示されません。この場合に VSS データベースを変更するには、 VSS エクスプローラを実行して [ファイル] メニューの [データベースを開く] をクリックします。そこで 適切な Srcsafe.ini ファイルを参照します。
  4. 現在作業しているシステムの名前を示す有効なデータベース名を入力できます。 [開く] をクリックして [OK] をクリックし、データベースに接続します。
  5. [Visual SourceSafe に追加] ダイアログ ボックスで、[プロジェクト] を展開し、システム名を選択します。
  6. [作成] をクリックします。このソリューション ファイル専用の VSS プロジェクト フォルダが作成されます。 VSS フォルダは Visual Studio .NET ソリューションと同じ名前になります。
  7. [OK] をクリックします。
  8. 重要 : ASP.NET Web アプリケーションを VSS に追加している場合、それぞれの Visual Studio .NET プロジェクトを VSS に追加するかどうかを確認するメッセージが表示されます。 Web アプリケーションの場合にのみ、以下の手順に従います (以下の 2 つの手順は Web アプリケーション以外では必要ありません)。
    1. [プロジェクト] を展開し、システム名を展開して、ソリューション名をクリックします。 [OK] をクリックします。
    2. プロジェクトを格納する新しい VSS フォルダを作成するかどうかを確認するメッセージが表示されます。 [はい] をクリックして新しいフォルダを作成します。ソリューション内のすべての Web プロジェクトに対してこの処理を繰り返します。

これで VSS のソース管理でソリューション ファイル、プロジェクト ファイル、およびソース ファイルが管理されるようになりました。ソリューション エクスプローラ ウィンドウ内の VSS に追加したすべてのファイルの横に錠前マークが表示されます。この表示は、ファイルが現在 VSS 内でロックされていることを示します。ローカルで作業中のフォルダには読み取り専用属性が割り当てられ、ファイルを VSS からチェックアウトするまでは作業できないようになっています。

編集時にチェックアウト

その後、ロックされているファイルを編集するために開くと、 Visual Studio .NET には編集時に自動的にチェックアウトする機能があり、ファイルをチェックアウトするかどうかを確認するメッセージを表示します。引き続きファイルを編集する場合、 [編集時にチェックアウト] ダイアログ ボックスの [チェックアウト] をクリックします。ファイルが自動的にチェックアウトされます。その後でソリューション エクスプローラのファイルを右クリックして [チェックイン] をクリックすると、 VSS にファイルをチェックインできます。

既存のソリューションを使用する 1 回目の作業

ここでは、チームの別のメンバがソリューションを作成して VSS に追加した状況を想定します。そのソリューションに含まれているプロジェクトの 1 つで作業するために、最初にソリューションを取得する必要があります。

VSS から既存のソリューションを取得するには

  1. Visual Studio .NET を起動します。
  2. [ファイル] メニューの [ソース管理] をポイントし、 [ソース管理で開く] をクリックします。 VSS ログイン ダイアログ ボックスが表示されます。
  3. VSS ユーザー名を入力し、 [参照] をクリックして VSS サーバーの VSS データベースに移動します。 VSS サーバーのファイル共有上で開発データベースを識別する Srcsafe.ini を選択します。このデータベースに以前接続したことがあり、 [次回の起動時にこのデータベースを開く] チェック ボックスをオンにしている場合は、自動的にデータベースが選択されます。
  4. [OK] をクリックしてデータベースに接続します。 [プロジェクトからデータベースを作成] ダイアログ ボックスが表示されます。
  5. [プロジェクト] を展開し、システム名のフォルダを展開後、取得するソリューションをクリックします。 [フォルダに移動して新しいプロジェクトを作成する] エディット ボックスに、「\Projects\SystemName\SolutionName」と入力します。 "SolutionName" は対象のソリューションの名前です。この結果、適切なローカル ファイル システム構造を持つことを確実にします。
  6. [OK] をクリックします。ローカル ソリューション フォルダが存在しない場合、作成するかどうかを確認するメッセージが表示されます。 [すべてはい] をクリックするとソリューション フォルダが作成されます。 Web アプリケーション以外の場合は、プロジェクトのサブフォルダも作成されます。
  7. ASP.NET Web アプリケーションの場合は、 [プロジェクト フォルダの設定] ダイアログ ボックスが表示されるので、 Web アプリケーションの作業場所を入力します。ここで Web アプリケーションの仮想ルートへのパスを識別する URL を指定できます。既定では Visual Studio .NET は http://localhost/<projectname> を想定しています。 [OK] をクリックして既定の場所を受け入れた場合、新しい仮想ルートは既定の Web サイトの下に作成されます (通常は \Inetpub\wwwroot です)。チーム環境で作業を行う場合は、アプリケーションをローカルに作成する場合であってもこの場所をお勧めしません。ソリューション フォルダの下のプロジェクト サブフォルダに仮想ルートを作成するには、以下の手順を実行後、[OK] をクリックして [プロジェクト フォルダの設定] ダイアログ ボックスの内容を受け入れます。
    1. Microsoft Windows エクスプローラを使用して、 \Projects\SystemName\SolutionName に作成されたソリューション フォルダの下に、プロジェクト サブフォルダを作成します。このサブフォルダの名前にはプロジェクト名を使用します。
    2. エクスプローラか Microsoft Internet Information Services (IIS) を使用して、このフォルダを IIS の仮想ルートとして設定します。
    3. Visual Studio .NET に戻り、作業場所として「http://localhost/projectname/」と入力します。
      重要 : 既存の URL (Uniform Resource Locator) を上書き入力して変更する必要があります。変更しないと、ダイアログ ボックスは依然として \inetpub\wwwroot の下のフォルダにアドレスをマッピングするよう認識します。
    4. [OK] をクリックして [プロジェクト フォルダの設定] ダイアログ ボックスを閉じます。プロジェクト ファイルと Web アプリケーション ファイルは、ソリューション フォルダの 1 階層下のサブフォルダにマッピングされた仮想ルートに配置されます。
  8. ソリューション ファイル、プロジェクト ファイル、ソース ファイルがハード ディスクにダウンロードされます。ただし、VSS でロックされたままであることに注意してください。ソリューション エクスプローラの各ファイルの横に表示された錠前マークからこのことを確認できます。
  9. ソリューション エクスプローラで、 1 つ以上のファイルを右クリックして選択し [チェックアウト] をクリックできます。または Visual Studio の編集時にチェックアウト機能がファイルをチェックアウトする必要があるときに自動的にメッセージを表示するので、単純にソース ファイルの編集を開始することもできます。
  10. ローカルでの開発が完了後、各ファイルを個別にチェックインするか、または IDE (統合開発環境) の [保留中のチェックイン] ウィンドウを使用できます。このウィンドウが表示されない場合、[表示] メニューの [保留中のチェックイン] をクリックする必要があります。
注意    ファイルをチェックインせずにソリューションを終了すると、メッセージは表示されません。作業者の名前でチェックアウトされたままになります。

既存のソリューションを使用する 2 回目以降の作業

ここでは、以前に 1 回以上作業したソース管理されている既存のソリューションで作業する状況を想定します。ローカル ファイル システムには、以前の作業時に作成されたソリューション フォルダとプロジェクト フォルダが存在します。この中には、読み取り専用のソリューション ファイルとプロジェクト ファイルが含まれています。

VSS から既存のソリューションを取得するには

  1. Visual Studio .NET を起動します。
  2. 必要なソリューションがスタート ページに表示されている場合はクリックします。表示されていない場合は、ローカル ファイル システムのソリューション (.sln) ファイルを参照してソリューションを開きます。
  3. 最新のプロジェクト ファイルを取得するには、ソリューション エクスプローラでソリューションを右クリックして、[最新バージョンを取得 (再帰)] をクリックします。
重要    以前に VSS から取得している既存のソリューションで作業するときは、ローカル ソリューション ファイルを開く必要があります。その場合は [ソース管理で開く] メニューを使用しないでください。使用した場合、Visual Studio .NET がローカル ソリューション ファイルとプロジェクト ファイルの存在を検出して、ファイルの上書きを確認するメッセージが表示されます。また、ファイルを 1 つでもチェックアウトしている場合、ローカル ファイルを VSS からのファイルに置き換えるか、またはローカル ファイルをそのまま開くか問い合わせるメッセージが表示されます。ローカル ソリューション ファイルを開く方が単純で、エラーの発生が少なくなります。

既存のソリューションへの新しいプロジェクトの追加

ここでは、既存のソリューションに新しいプロジェクトを追加する状況を想定します。以下の手順は、ソリューションを VSS から上記の説明どおりに取得していることを想定しています。

新しいプロジェクトを追加して VSS に追加するには

  1. [ファイル] メニューの [プロジェクトの追加] をポイントし、 [新しいプロジェクト] をクリックします。
  2. 適切なプロジェクトの種類とテンプレートを選択し、プロジェクト名を入力します。
  3. ASP.NET Web プロジェクトの場合は、手作業でソリューション フォルダの下にプロジェクト サブフォルダを作成し、 IIS 仮想ルートとしてマークする必要があります。 Web アプリケーション以外の場合、新しいプロジェクト フォルダの場所は既定でソリューション フォルダの 1 レベル下になります。
  4. [OK] をクリックします。 Visual Studio .NET は新しいプロジェクトの詳細をソリューション ファイルに追加する必要があるので、 (チェックアウトがまだの場合は) ファイルをチェックアウトするかどうかを確認するメッセージが自動的に表示されます。
  5. [チェックアウト] をクリックします。新しいプロジェクトがソリューションに追加され、ソリューション エクスプローラに表示されます。なお、新しいプロジェクトの各ファイルの横には時計のマークが表示されます。このマークは、ファイルのロックが解除されていて、編集用に利用できることを示します。
  6. 新しいプロジェクト ファイルを使用した初期開発作業の終了後に、ファイルを VSS にチェックインする必要があります。 (新しいプロジェクトを含めた) ソリューション全体を VSS に戻すには、ソリューション エクスプローラでソリューションを右クリックし、[チェックイン] をクリックします。
  7. [チェックイン] ダイアログ ボックスに、現在チェックアウトされているすべてのファイルが表示されます。この中には新しいプロジェクト ファイルとソース ファイルが含まれています。すべてのファイルをチェックインするには、[チェックイン] をクリックします。

VSS へのソース ファイルのチェックイン

ソリューションとプロジェクトが VSS に存在する場合は、更新したファイルだけをチェックインする必要があります。これは、ソリューション エクスプローラで個別のファイルを右クリックして、 [チェックイン] をクリックすると実行できます。または、IDE の最下部に表示される [保留中のチェックイン] ページを使用して、チェックインする必要があるすべてのファイルの一覧を参照できます。このページを使用すると複数のファイルを簡単にチェックインできます。

ビルドの準備が整ったときのみファイルをチェックイン

通常 VSS にプロジェクトとファイルをチェックインするのは、単体テストを完了して、同僚のチーム メンバが他のプロジェクトに対し行った更新と共にビルドするときに、統合による問題が発生する可能性が低い場合に限ります。

重要    これは、一部のファイルを数日間 VSS にチェックインしないことになります。したがって、すべての開発用ワークステーションに対して十分なバックアップ作業が毎日適切に行われるようにしてください。
注意    昇格レベルの概念をネイティブにサポートする変更管理システムを使用して作業する場合は、現在の完成度とは無関係に、定期的にファイルをチェックインしたほうが良い場合があります。昇格レベルをサポートする変更管理システムは、通常特にこの目的での初期 "開発" レベルを提供します。ビルド プロセスはこのレベルからはソース ファイルを抽出しません。 "統合" など、高い昇格レベルに関連付けられているソース ファイルを使用して機能します。開発者やビルド コーディネータは、システム ビルド全体でファイルを統合する準備が整ったときのみファイルをこのレベルに昇格します。

ファイルとフォルダの名前の変更と削除

場合によっては、ソース管理 VSS プロジェクト内に存在する個別のファイルやフォルダの名前を変更したり、削除する必要があります。削除や名前の変更を Visual Studio .NET IDE で行っても自動的には VSS に反映されません。その逆も同じです。したがって、Visual Studio .NET と組み合わせて VSS エクスプローラを使用する必要があります。

ファイル名の変更

以下の手順は、Visual Studio .NET プロジェクト内のファイル名を変更する方法を説明しています。

Visual Studio .NET プロジェクトに含まれる既存ファイルの名前を変更するには

  1. VSS エクスプローラを使用して、名前を変更するファイルがチェックアウトされていないことを確認します。
  2. VSS エクスプローラを使用して、ファイル名を変更します。
  3. Visual Studio .NET を使用して、ファイル名を変更するプロジェクトを含むソリューションを開きます。ソリューション エクスプローラに、VSS で名前を変更したファイルがチェックアウトされていると表示されます。既に Visual Studio .NET にプロジェクトを読み込んでいる場合、ソリューション エクスプローラでプロジェクト ファイルを右クリックし、 [最新バージョンを取得 (再帰)] をクリックします。
  4. ソリューション エクスプローラでファイルを右クリックし、 [名前の変更] をクリックします。ファイル名は VSS での新しい名前と一致するように変更します。
  5. プロジェクト ファイルはファイルの一覧が保持されているので、チェックアウトするかどうかを確認するメッセージが表示されます。 [編集時にチェックアウト] ダイアログ ボックスで [チェックアウト] をクリックします。
  6. ソース管理メッセージ ボックスで、 [変更点を反映して継続] をクリックします。
  7. ソリューション エクスプローラに、ファイルがロックされていると表示されます。プロジェクト ファイルを VSS にチェックインします。

プロジェクト名の変更

第 3 章「ソリューションとプロジェクトの構成」の「名前付け規則を慎重に検討する」で説明したように、プロジェクト名を変更するときは、一貫した命名規則に従って以下の項目の名前を変更する必要があります。

  • Visual Studio .NET プロジェクト ファイル
  • プロジェクト ファイルを保持するローカル ファイル システム フォルダ
  • VSS プロジェクト フォルダ
  • 出力アセンブリ名
  • プロジェクトのルート名前空間

プロジェクト名を変更するには

  1. プロジェクト ファイル、そのプロジェクト ファイルを保持するソリューション ファイル、およびプロジェクト内のすべてのファイルがチェックアウトされていないことを確認します。
  2. ソリューション ファイルをチェックアウトします。 Visual Studio .NET ソリューション エクスプローラでソリューションを右クリックし、 [チェックアウト] をクリックします。 [チェックアウト] ダイアログ ボックスでソリューション ファイルのみが選択されている (プロジェクト ファイルが選択されていない) ことを確認し、 [チェックアウト] をクリックします。
  3. ここで、VSS データベースからプロジェクトをバインド解除する必要があります。 Visual Studio .NET で、[ファイル] メニューの [ソース管理] をポイントして、 [ソース管理の変更] をクリックします。
  4. 名前を変更するプロジェクトを選択し (このとき自動的にソリューションも選択される場合があります)、 [バインドの解除] をクリックします。[ソース管理の変更] メッセージ ボックスが表示されるので、 [バインドの解除] をクリックします。
  5. [OK] をクリックして [ソース管理の変更] ダイアログ ボックスを閉じます。プロジェクト ファイルは (多くの場合ソリューション ファイルも) VSS データベースとのバインドが解除されます。
  6. ソリューション エクスプローラで、名前を変更するプロジェクトを右クリックし、 [名前の変更] をクリックします。新しいプロジェクト名を入力します。
  7. [ファイル] メニューの [すべて保存] をクリックします。ローカル ソリューション ファイルが更新されます。
  8. ローカル プロジェクト フォルダの名前を変更できるようにするため、ここでプロジェクトをソリューションから一時的に削除する必要があります。ソリューション エクスプローラで、名前を変更するプロジェクトを右クリックし、[削除] をクリックします。 [Microsoft Development Environment] メッセージ ボックスが表示されるので、[OK] をクリックします。
  9. エクスプローラを使用して、変更後のプロジェクト ファイル名と一致するようにローカル ファイル システムのプロジェクト フォルダの名前を変更します。
  10. Web アプリケーション名を変更する場合、エクスプローラか IIS を使用して、名前を変更したフォルダを IIS の仮想ルートとして確立します。メモ帳を使用してプロジェクト フォルダの .webinfo ファイルを編集し、 URLPath 属性がプロジェクトの新しい仮想ルート フォルダを指すように設定します。
  11. Visual Studio .NET に戻ります。ソリューション エクスプローラのソリューション ファイルを右クリックし、[追加] をポイントして [既存のプロジェクト] をクリックします。名前を変更したローカル プロジェクト フォルダを参照し、名前を変更したプロジェクト ファイルを選択して、[開く] をクリックします。
  12. VSS エクスプローラを使用して、変更後のプロジェクト名と一致するように VSS プロジェクトの名前を変更します。
  13. これでプロジェクトを VSS データベースに再バインドできるようになります。 Visual Studio .NET に戻り、[ファイル] メニューの [ソース管理] をポイントし、[ソース管理の変更] をクリックします。
  14. ソリューション ファイルが現在バインド解除されている場合、 [ソース管理の変更] でファイルをクリックして [バインド] をクリックします。このとき、VSS へのログインが必要な場合があります。 VSS のソリューション フォルダに移動してフォルダをクリックし、[OK] をクリックします。
  15. [ソース管理の変更] ダイアログ ボックスで、名前を変更したプロジェクトをクリックし、 [バインド] をクリックします。必要に応じて VSS にログインします。
  16. VSS で、名前を変更したプロジェクト フォルダに移動し、フォルダをクリックして [OK] をクリックします。
  17. [OK] をクリックして [ソース管理の変更] ダイアログ ボックスを閉じます。 [ソース管理] メッセージ ボックスが表示されるので [OK] をクリックします。
  18. [保留中のチェックイン] ウィンドウを使用して、ソリューションと、名前を変更したプロジェクトを VSS にチェックインします。
  19. ここで、該当するソース ファイルをチェックアウトし、ルート名前空間をプロジェクト名と一致するように更新する必要があります。
  20. プロジェクト ファイルをチェックアウトし、プロジェクト プロパティを更新する必要もあります。更新するプロパティは出力 DLL (ダイナミック リンク ライブラリ) や実行可能ファイルの名前を制御する Assembly Name などです。また、C# プロジェクトの場合は Default Namespace を、 Microsoft Visual Basic® .NET プロジェクトの場合は Root Namespace を更新します。この 2 つは新しい種類を追加する既定の名前空間を管理します。

古いプロジェクト ファイルを整理するには

古いプロジェクト ファイル、関連するソース管理メタデータ ファイル、および Web アプリケーションの場合の Web サービス ダイナミック探索ファイルは、名前を変更した VSS プロジェクト フォルダに残存し、ローカル ファイル システムの名前を変更したプロジェクト フォルダにも残存します。このようなアイテムは削除して整理する必要があります。

  1. VSS エクスプローラを使用して、名前を変更したプロジェクト フォルダから古いプロジェクト ファイル (*.csproj.proj)、古い Visual Studio ソース管理プロジェクト メタデータ ファイル (*.csproj.vspcc)、および Web アプリケーションの場合の古い Web サービス ダイナミック探索ファイル (*.vsdisco) を削除します。VSS で新しいプロジェクト ファイルが表示されるように、表示を最新状態に更新する必要がある場合があります。
  2. エクスプローラを使用して、ローカルに名前を変更したファイル システム プロジェクト フォルダから、古い Visual Studio ソース管理プロジェクト メタデータ ファイル (*.csproj.vspcc) と、Web アプリケーションの場合の古い Web サービス ダイナミック探索ファイル (*.vsdicso) を削除します。なお、これらのファイルはローカル ファイル システムでは読み取り専用です。
  3. Web アプリケーションの場合は、IIS を使用して名前を変更した古い仮想ルートを削除します。

VSS からのファイル削除

以下の手順は、プロジェクトを 1 つ以上含む VSS のソリューションを開いていて、プロジェクトに削除するファイルが含まれていることを前提としています。

ファイルを削除するには

  1. 削除するファイルがチェックアウトされていないことを確認します。
  2. ソリューション エクスプローラで、削除するファイルを右クリックし、 [チェックアウト] をクリックします。
  3. [チェックアウト] の構成確認ダイアログ ボックスで、[チェックアウト] をクリックします。既に第三者がファイルをチェックアウトしている場合、ファイルを排他的に利用できるようになるまで待機する必要があります。
  4. ソリューション エクスプローラで、ファイルを右クリックし、[削除] をクリックします。
  5. ファイルを完全に削除するかどうかを確認する [Microsoft Development Environment] メッセージ ボックスが表示されるので、[OK] をクリックします。
  6. プロジェクト ファイルはファイルの一覧が保持されているので、チェックアウトするかどうかを確認するメッセージが表示されます。 [編集時にチェックアウト] ダイアログ ボックスで [チェックアウト] をクリックします。
  7. VSS にプロジェクト ファイルをチェックインします。
  8. VSS エクスプローラを使用して、 VSS データベースから (チェックアウトの表示になっている) ファイルを削除します。 [Microsoft Visual SourceSafe] メッセージ ボックスが表示されるので、[はい] をクリックしてファイルの削除を確認します。

VSS からのプロジェクトの削除

以下の手順で、VSS からプロジェクトを削除する方法を説明します。

VSS からプロジェクトを削除するには

  1. ソリューション エクスプローラで、削除するプロジェクトを右クリックし、[削除] をクリックします。
  2. [Microsoft Development Environment] メッセージ ボックスで確認されるので、[OK] をクリックします。
  3. ソリューション ファイルはプロジェクトの一覧が保持されているので、チェックアウトするかどうかを確認するメッセージが表示されます。 [編集時にチェックアウト] ダイアログ ボックスで、[チェックアウト] をクリックします。
  4. ソリューションを VSS にチェックインします。
  5. VSS エクスプローラを使用して、VSS データベースからプロジェクトを削除します。
  6. ローカル ハード ディスクからプロジェクト フォルダを削除します。 Web アプリケーションの場合は、IIS を使用して対応する仮想ルートも削除します。

VSS からのソリューションの削除

以下の手順で、VSS からソリューションを削除する方法を説明します。

VSS からソリューション (と内部の全プロジェクト) を削除するには

  1. VSS エクスプローラで、ソリューション ファイル、すべてのサブプロジェクト、およびプロジェクト ファイルがいずれもチェックアウトされていないことを確認します。
  2. VSS エクスプローラを使用して、 VSS からソリューションを削除します。
  3. ローカル ハード ディスクからソリューションを削除します。
注意    削除しようとしていることを他のチーム メンバに連絡して、メンバが現在 Visual Studio .NET にソリューションを読み込んでいる場合にアンロードできるようにする必要があります。削除時にチーム メンバがソリューションを (チェックアウトせずに) 読み込んでいる場合、削除後にソリューションに含まれていたファイルをチェックアウトしようとすると、VSS エラーが発生します。

多重チェックアウト

通常は、VSS からファイルをチェックアウトできるのは一度に 1 人のユーザーだけです。しかし、VSS 管理ツールを使用すると、複数のユーザーが同一のファイルを同時にチェックアウトできるように VSS を構成できます。

多重チェックアウトは、プロジェクト ファイルなど頻繁にアクセスするファイルでの競合回避に役立つので、チーム環境で使用すると有益な場合があります。ただし、この機能を使用する場合、チームのそれぞれのメンバどうしで入念な調整を行う必要があり、 VSS にファイルをチェックインするときに変更が正しくマージされるよう配慮する必要があります。

多重チェックアウト モードのファイルを使って作業するには

  1. ソリューション エクスプローラを使用して必要なファイルをチェックアウトします。他のユーザーがファイルをチェックアウトしていることが Visual Studio .NET から警告されます。 [Microsoft Visual SourceSafe] メッセージ ボックスが表示されるので、[はい] をクリックします。
  2. ファイルのコピーを変更し、プロジェクトをコンパイルして単体テストを行います。
  3. ファイルをチェックインする前に、他の開発者による変更部分をマージし、ローカルで結合してテストする必要があります。これを行うには、ソリューション エクスプローラでファイルを右クリックし、 [最新バージョンの取得] をクリックします。 [Microsoft Visual SourceSafe] メッセージ ボックスが表示されるので、[マージ] をクリックします。 VSS が自動的に VSS のファイルとローカルで作業中のコピーをマージします。マージ後のファイルはコンパイルしてテストできます。
  4. テスト終了後、Visual Studio .NET を使用してファイルを VSS にチェックインします。ファイルがマージ済みの場合、VSS は競合がすべて正しく解決されているかチェックするかどうかを確認するメッセージを表示します。メッセージに対し [はい] をクリックすると、ファイルは VSS にチェックインされます。

ソリューション ファイルのチェックアウト

ソリューション ファイルは、マージ処理を困難にし、エラーを発生しやすくする要素であるプロジェクト グループを含んでいるので、同時チェックアウトが特に困難です。他の開発者が既にソリューション ファイルをチェックアウトしている場合は、通常はファイルをチェックアウトしないようにする必要があります。

多重チェックアウトを避ける以外にも、ソリューション ファイルの競合を減らすため、(たとえば、新しいプロジェクトの追加などは) 一度に短時間のチェックアウトを心掛けます。競合が発生した場合は他の開発者と調整し、ソリューション ファイルが排他的に利用できるようになるまで待機してからチェックアウトします。

関連情報

多重チェックアウトの詳細については、「http://www.microsoft.com/japan/msdn/library/ja/guides/html/vstskCheck_Out_Multiple_Files.asp」 を参照してください。

これは、「Visual Studio .NET と Visual SourceSafe を使用したチーム開発ガイド」の第 6 章です。続いて、第 7 章「チーム環境のセットアップと管理」を参照してください。


by artis

テスティングフレームワークJUnit - 説明リンク

2007. 4. 11. 15:21

by artis

JUnit 단계별 설명

2007. 4. 11. 14:54

JUnit 개발자

JUnit 단계별 설명

저자:Michel Casabianca

JUnit 테스트 사례 작성

이제까지 자신이 구현한 IsoDate가 잘 만들어졌는지를 확인해 보기 위한 테스트 클래스 소스를 살펴 보았습니다. 그러면 이제 그러한 테스트 파일을 실제로 구현하는 것에 대해 살펴보기로 하겠습니다.

테스트는 JUnit 프레임워크의 이점을 이용할 수 있도록 JUnit.framework.TestCase로부터 값을 계승하며, 이 클래스 이름은 "Test"라는 말이 덧붙여진 테스트 클래스의 이름이 됩니다. 예를 들어 IsoDate라는 클래스를 테스트하고 있다면, 테스트 클래스 이름은 IsoDateTest가 됩니다. 일반적으로 이 클래스는 개인적인 것들 이외의 모든 메소드에 액세스 할 수 있도록, 테스트 클래스와 동일한 패키지에 들어 있습니다.

클래스 내에서 테스트할 각 메소드에 대한 메소드를 하나씩 작성해야 한다는 것에 유념하십시오. 예를 들어, ISO 데이타 형식을 사용하는 생성자나 메소드를 테스트할 경우에는, ISO 형식의 String을 인수로 하고 toString()을 메소드로 취하는 생성자에 대한 테스트 메소드를 작성해야 할 것입니다. 이름을 짓는 패턴은 테스트 사례의 경우와 유사합니다. 즉, 테스트된 메소드(또는 생성자)의 이름 앞에 "test"를 추가하기만 하면 됩니다.

테스트 메소드의 본문은 assertion을 검증함으로써 테스트 대상 메소드를 시험합니다. 예를 들어 toString() 실행에 대한 테스트 메소드에서 여러분은 초기 시작(UNIX 시스템이 탄생한 1970년 1월 1일 자정)이 메소드에 의해 잘 포맷되어있는지 검사하기를 원할 수 있습니다. 이 assertion을 실행하려면, 프레임워크가 제공하는 assertion 메소드를 사용하면 됩니다. 이들 메소드는 프레임워크의 JUnit.framework.Assert 클래스에서 실행할 수 있으며 테스트에서 액세스할 수 있는데, Assert가 TestCase의 부모 클래스이기 때문입니다. 이들 메소드는 assert Java 키워드(J2EE 1.4의 최신 버전)에 필적하는 것입니다. Assertion 메소드에는 기본 유형들 (부울, 정수 등) 사이의 동등성 또는 객체 사이의 동등성을 검사하는 (()equals 메소드를 사용하여 두 객체가 동일한 것인지 검사함) 메소드들이 있습니다. 다른 assertion 메소드는 두 객체의 동일성 여부를 검사합니다. 즉, 객체가 널(null)인지 아닌지, 그리고 (일반적으로 표현식에서 비롯되는) 부울이 참인지 거짓인지 등을 검사합니다. 이들 메소드는 표 1에 요약되어 있습니다.

부동(float)의 또는 이중 인수(double argument)로 작업하는 assertion에 대해서는, 비교에 허용되는 델타를 인수로 취하는 세 번째 메소드가 있습니다. assertEquals() 및 assertSame() 메소드는 일반적으로 동일한 결과를 만들어내지 않는다는 점에도 유의하십시오. (동일한 값을 가진 두 개의String 이라 할지라도, 서로 다른 메모리 주소를 가진 별개의 객체로서, 동일한 것이 아닐 수도 있습니다.) 그러므로, assertEquals() 는 assertion를 검증하는 반면, assertSame()은 그렇게 하지 못합니다. 표 1 의 각 assertion 메소드에 대해서는, assertion이 실패할 경우, 설명적인 메시지를 제공하는 다른 인수를 포함시킬 수 있습니다. 따라서, 예를 들자면 , assertEquals(int expected, int actual) 은 assertEquals(String Message, int expected, int actual)과 같은 메시지와 함께 사용될 수 있습니다.

Assertion이 실패할 경우, assertion 메소드는 AssertFailedError 이나 ComparisonFailure를 발생시킵니다. AssertionFailedError는 java.lang.Error로부터 계승되므로, 테스트 메소드의 throws 절에 이를 선언할 필요는 없습니다. ComparisonFailure 는 AssertionFailedError로부터 계승되므로, 이것 역시 선언할 필요가 없습니다. Assertion 실패 시 테스트 메소드에 오류가 발생하게 되므로, 후속 assertion은 수행되지 않습니다. 프레임워크는 이 오류들을 잡아낸 다음 테스트가 실패한 것으로 간주하여, 오류 메시지를 인쇄합니다. 이 메시지는 assertion으로부터 생성되어, (있을 경우) assertion 메소드에 전달됨으로써 완성됩니다.

메소드의 끝에 다음과 같은 행을 넣어 보겠습니다

assertEquals("This is a test",1,2);

Now compile the test and run it:

$ javac *.java
$ java junit.textui.TestRunner IsoDateTest
.F.
Time: 0,348

There was 1 failure:
1) testIsoDate(IsoDateTest)junit.framework
.AssertionFailedError: This is a test expected:<1> but was:<2>
      at IsoDateTest.testIsoDate
      (IsoDateTest.java:29)

FAILURES!!!
Tests run: 2,  Failures: 1,  Errors: 0

JUnit은 각각의 처리된 테스트를 위해 점을 인쇄해 주고 실패한 경우에는 F로 표시되고, 실패한 assertion을 위해 메시지를 표시합니다. 이 메시지는 assertion 메소드에 보내진 설명과 (자동으로 생성되는) assertion 결과로 구성됩니다. 여기에서는 assertion 메소드에 대한 인수의 순서가 생성된 메시지를 이해하는 데 매우 중요한 것임을 알 수 있습니다. 첫번 째 인수는 기대 값인 반면 두 번 째 것은 실제 값이기 때문입니다.

테스트용 메소드에 잘못(예를 들어 예외 발생 등)이 발견되면, 툴에 의해 (assertion 실패에서 비롯된 실패가 아니라) 오류로서 표시됩니다. 이제 IsoDateTest 클래스를 수정하여, 전에 추가했던 행을 다음 행으로 바꾸어 보겠습니다.

throw new Exception("This is a test"); 

이제 테스트를 컴파일하고 수행해 보겠습니다.

$ javac *.java

$ java junit.textui.TestRunner IsoDateTest 
.E.
Time: 0,284
There was 1 error:
1) testIsoDate(IsoDateTest)java.lang.
   Exception: This is a test at IsoDate
   Test.testIsoDate(IsoDateTest.java:30)

FAILURES!!!
Tests run: 2,  Failures: 0,  Errors: 1

툴은 예외를 오류로 표시하기 때문에, 오류는 테스트 실행이 손상되었다기 보다는 테스트 메소드가 손상되었음을 의미합니다.

Assert 클래스는 AssertionFailedError을 발생시켜 테스트 실행을 인터럽트하는, fail() 메소드 (그리고 설명 메시지가 있는 버전)을 포함하고 있습니다. 이 메소드는 Assertion 메소드 호출 없이 테스트 실패를 유도하려 할 때 유용하게 쓰입니다. 예를 들어, 하나의 코드가 예외를 발생시켜야 함에도 불구하고 그렇게 하지 않을 경우, 다음과 같이 fail() 메소드를 호출함으로써 테스트 실패를 유도할 수 있습니다.

public void testIndexOutOfBounds() {
  try {
       ArrayList list=new ArrayList();
       list.get(0);
       fail("IndexOutOfBoundsException   
           not thrown");
  } catch(IndexOutOfBoundsException e) {}
}

Junit의 고급 기능

샘플 테스트의 경우 여러분은 여러 테스트를 동시에 실행해 왔을 것입니다. 그러나 실제 상황에서는 구현 방식을 검사하기 위해 하나의 특정한 테스트 방법을 사용하는 것을 선호하기 때문에, 사용할 일련의 테스트를 정의할 필요가 있습니다. 이것이 junit.framework.TestSuite 프레임워크 클래스의 목적입니다. 이 프레임워크는 단순히 일련의 테스트를 추가할 수 있는 컨테이너에 불과합니다. toString() 구현을 위한 테스트 방법을 사용하고 싶다면 suite() 테스트 방법을 다음과 같이 덮어쓰십시오.

public static Test suite() {
  TestSuite suite= new TestSuite();
  suite.addTest(new IsoDateTest
("testToString"));
  return suite;
}

이 방법에서 TestSuite 객체는 인스턴스화가 가능하며 이 객체에 대한 여러 테스트가 추가적으로 이루어질 수 있습니다. 방법 단계에서 테스트를 정의하기 위해, 실시할 방법명을 매개변수로 채택하는 구성자를 이용 함으로써 테스트 클래스는 인스턴스화 됩니다. 이 구성자는 다음과 같이 실행됩니다.

public IsoDateTest(String name) {
  super(name);
}

위에 나와 있는 구성자와 메소드를 IsoDateTest 클래스에 추가하고 (또한 junit.framework.Test와 junit.framework.TestSuite를 임포트할 필요가 있을 수 있습니다), 터미널을 입력합니다.

selecting a test method

그림 3: 테스트 방법 선택

 
$ javac *.java
$ java junit.textui.TestRunner IsoDateTest
.
Time: 0,31
OK (1 test)

테스트 스위트에 추가된 유일한 테스트 메소드가 toString()인 점을 주목하십시오.
그래픽 인터페이스를 이용한 특정 테스트 메소드는 그림 3에 예시된 것처럼 테스트 Hierarchy 패널에서 선택함으로써 사용할 수 있습니다. 그러나 이 스위트는 전체 테스트 스위트가 한번 실시되면 √로 채워집니다.

TestSuite 객체에 한 테스트 사례의 모든 메소드를 추가하고자 하는 경우, 이를 위한 전용 생성자가 있습니다. 이 생성자는 테스트 사례의 class 객체를 인수로 채택합니다. 예를 들어, IsoDateTest 클래스를 이용하여 suite() 메소드를 다음과 같이 실행할 수 있습니다.

public static Test suite() {
  return new TestSuite(IsoDateTest.class);
}

한 제품을 출시하기 전에 그 제품에 대해 실시되는 모든 테스트와 같이 다른 테스트들로 구성된 일련의 테스트를 실시하고자 하는 경우에는, 원하는 테스트 스위트를 구성하는 suite() 방법을 구현할 클래스를 써야 합니다. 예를 들어 테스트 클래스 Atest 와 Btest를 쓰는 것에 대해 생각해 봅시다. 클래스 ATest의 모든 테스트를 포함하는 테스트 모음과 Btest라고 규정된 테스트 스위트를 정의하기 위해 다음과 같이 클래스를 쓸 수 있습니다.

import junit.framework.*;

/**
 * TestSuite that runs all tests.
 */
public class AllTests {

  public static Test suite() {
     TestSuite suite= new TestSuite("All Tests");
     suite.addTestSuite(ATest.class);
     suite.addTest(BTest.suite());
     return suite;
  }
}

마치 하나의 테스트 사례를 실시하는 것처럼 정확하게 이러한 테스트 스위트를 실시할 수 있습니다. 테스트가 한 테스트 스위트에 두 번 추가된다면 테스트 실행기는 그 테스트를 두 번 실행합니다. (테스트 스위트나 테스트 실행기 중 어떤 것도 테스트가 유일함을 확인하지 못합니다.) 실제 상황에서의 테스트 스위트 실행 방법을 이해하려면, JUnit 테스트 스위트 자체를 살펴봐야 합니다. 그러한 클래스의 소스는 JUnit 설치 프로그램의 junit/tests디렉토리에 있습니다.

test results

그림 4: 테스트 결과를 보여주는 보고서

테스트 실행기를 사용하지 않고 테스트를 하기 위해서는 테스트나 테스트 스위트에 main()을 추가하는 것이 때로는 편리합니다. 예를 들어, 표준 Java프로그램으로서 AllTests 스위트를 실행하기 위해서는 클래스에 다음과 같은 main()을 추가하십시오.

public static void main(String[] args) {
  junit.textui.TestRunner.run(suite());

}

이제 여러분은 java AllTests를 입력함으로써 이러한 테스트 조를 실행할 수 있습니다.
이 프레임워크는 또한 리소스를 픽스처(Fixture)에 모음으로써 코드를 절약하는 방법을 제공합니다. 예를 들어 예제 테스트 사례는 epoch와 eon이라는 두개의 기준 날짜를 사용합니다. 이러한 날짜를 각 테스트 방법에 다시 구축하는 것은 (잠재적으로 실수하기 쉬운 프로세스일 뿐만 아니라) 시간 낭비일 수 있습니다. 목록 2에서 예시된 것처럼, 이러한 테스트는 픽스처(Fixture)로 다시 쓸 수 있습니다.
참조 날짜를 테스트 클래스의 필드로 정의하고 이를 setUp()에 구축합니다. 이 메소드는 각 테스트 메소드 이전에 호출됩니다. 반대 방법은 tearDown() 인데, 이 방법은 각 테스트 방법이 실행된 후 리소스를 정리합니다. 이 실행에서는 쓰레기 수집기(garbage collector)가 정리하는 일을 하기 때문에 이 메소드는 사실상 아무것도 하지 않습니다. 이제 이러한 테스트 사례를 컴파일하고 실행하되, 이러한 테스트 사례의 소스 코드는 JUnit의 설치 디렉토리에 넣어야 한다는 점을 주의하십시오.

$ javac *.java
$ java junit.textui.TestRunner IsoDateTest2
.setUp()
testIsoDate()
tearDown()
.setUp()
testToString()

tearDown()

Time: 0,373

OK (2 tests)

어떠한 테스트 방법에서 날짜를 수정하더라도 다른 테스트에 역효과를 주지 않도록 참조 날짜를 설정해야 합니다. 이러한 두 가지 방법에 코드를 넣어 데이타베이스 접속과 같은 각 테스트에 필요한 리소스를 설치하고 정리하도록 합니다.

JUnit 배포는 반복적인 테스트 실행과 같은 새로운 기능을 제공하는 테스트 데코레이터인, 확장자(패키지에서는 junit.extensions)와 함께 제공됩니다. 또한 이 배포는 별도의 스레드에서 동시에 모든 테스트를 실행하고 모든 스레드가 끝날 때 멈추는 TestSuite와도 함께 제공됩니다.


出所 - http://www.oracle.com/global/kr/magazine/webcolumns/2003/o33junit_1.html

by artis