В jUnit есть удобное правило для таких сценариев, как ваш.
public class MyHandlerTest {
@Rule
// creates a temp folder that will be removed after each test
public org.junit.rules.TemporaryFolder folder = new org.junit.rules.TemporaryFolder();
private MyHandler handler;
@Before
public void setUp() throws Exception {
File file = folder.newFile("myFile.txt");
// do whatever you need with it - fill with test content and so on.
handler = new MyHandler(file.getAbsolutePath()); // use the real thing
}
// Test whatever behaviour you need with a real file and predefined dataset.
}
Это - хороший вопрос, как это, для меня, возможность проверить Посторонний объект...
Если Вы не возражаете, я пользуюсь возможностью, чтобы объяснить, как использовать Посторонний объект, таким образом, люди как я (не очень привыкший к require
) спотыкание на этот поток начнет...
Вы даете ссылку на страницу LuaForge, я пошел туда и видел, что мне был нужен LuaRock для получения ее.:-( Я должен установить последнего когда-нибудь, но я принял решение пропустить это на данный момент. Таким образом, я перешел к репозиторию и загрузил alien-0.4.1-1.win32-x86.rock. Я узнал, что это был простой zip-файл, который я мог разархивировать, как обычно.
После нащупывания немного с require
, Я закончил взламывание путей в сценарии Lua для быстрого теста. Я должен создать LUA_PATH
и LUA_CPATH
в моей среде вместо этого, я сделаю это позже.
Таким образом, я взял alien.lua, core.dll и struct.dll от разархивированных папок и подверг их каталогу под названием Посторонний объект в общем репозитории библиотеки.
И я добавил следующие строки к запуску моего сценария (плохой взлом, предупреждающий!):
package.path = 'C:/PrgCmdLine/Tecgraf/lib/?.lua;' .. package.path
package.cpath = 'C:/PrgCmdLine/Tecgraf/lib/?.dll;' .. package.path
require[[Alien/alien]]
Затем я попробовал его простой, упрощенной функцией с непосредственным визуальным результатом: MessageBox.
local mb = alien.User32.MessageBoxA
mb:types{ 'long', 'long', 'string', 'string', 'long' }
print(mb(0, "Hello World!", "Cliché", 64))
Да, я получил окно сообщения! Но после нажатия "ОК", я получил катастрофический отказ Lua, вероятно, как Вы. После быстрого сканирования Посторонних документов я узнал преступника (без имени): мы должны использовать stdcall соглашение о вызовах для Windows API:
mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' }
Таким образом, это было тривиально для совершения вызова для работы:
local eev = alien.Kernel32.ExpandEnvironmentStringsA
eev:types{ ret = "long", abi = 'stdcall', "string", "pointer", "long" }
local buffer = alien.buffer(512)
eev("%USERPROFILE%", buffer, 512)
print(tostring(buffer))
Обратите внимание, что я поместил буферный параметр в вызов eev...