달력

92025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

 앞선 글에서 SrufaceVeiw를 스크린샷 찍는 방법을 알아봤지만, 이렇게해도 안찍히는 경우가 있다면, adb를 이용하는 방법으로 root 계정을 이용한 스크린샷을 찍는 방법을 이용할 수 있다. 

 다만 이 방법의 경우 해당 폰이 루팅이 되어있어야한다.


폰을 루팅하고 su 권한을 얻은 상태라면, 다음 라이브러리를 이용해서 코드한줄로 스크린샷이 가능하다.


https://github.com/Android-ScreenShot/AndroidScreenShotService


해당 깃허브에서 AndroidScreenCap.jar 을 다운받아 자신의 프로젝트에 넣고, 스크린샷을 필요로 하는 곳에서


publice void screenCapture(){

ScreentShotUtil ss = ScreentShotUtil.getInstance();

ss.takeScreenshot(Context, FullPath);

}


이렇게 호출하면 된다. FullPath에는 파일명까지 넣어줘야한다.

(ex : environment.getexternalstoragedirectory().getpath() + "/폴더명/"+System.currentTimeMillis()+".png")


주의 : 경로를 잘못설정하면 파일이 생성되지 않는다. 혹시나 파일이 생성되지 않으면 경로가 제대로 지정되어있는지 확인해 보자.

'android' 카테고리의 다른 글

[android] Screenshot 기능 넣기  (0) 2016.01.31
[android] switch vs if else  (0) 2015.01.29
[android]다른 프로젝트의 Activity 불러오기  (0) 2015.01.29
[android]URL ImageView 생성  (0) 2015.01.27
[android]AlertDialog ListView 예제  (0) 2015.01.20
Posted by 초코렛과자
|

android에서 스크린샷은 스크린샷을 찍고자하는 activity를 불러와서 이를 bitmap 형식으로 변환, 원하는 포멧으로 저장하는 방법을 사용한다. 하지만 현재, 별도의 Camera device에서 android 폰으로 영상을 실시간으로 전송해서(byte arrary 형식) 폰으로는 볼 수 있는데, 해당 activity를 스크린샷 코드를통해 찍으면 검정색 화면만 나온다!


 public void screenshot() { 
  View view = MyActivity.this.getWindow().getDecorView();

  view.setDrawingCacheEnabled(true);

  Bitmap screenshot = view.getDrawingCache();

  String filename = "screenshot.png";

  try {

  File file = new File(Environment.getExternalStorageDirectory(), filename);

//  File file = new File(Environment.getExternalStorageDirectory()+"/추가경로/", filename);

  f.createNewFile();

  OutputStream outStream = new FileOutputStream(f);

  screenshot.compress(Bitmap.CompressFormat.PNG, 100, outStream);

  outStream.close();

  } catch (IOException e) {

  e.printStackTrace();

  }

  view.setDrawingCacheEnabled(false);

  }

}


뭐가 문제인지 찾아봐야겠다.

Posted by 초코렛과자
|

앞선 글에 대한 해답은 역시 구글에서 찾았다. 그동안 코딩했던 내용과 크게 다르지 않은데, 놓치고 있던 부분이 있었던 것 같다. 


참고사이트 http://www.progtown.com/topic1077981-unsolved-outer-object.html


main.cpp

#include "wcomm.h"
#include <string>
#include "winsock2.h"
#include <clocale>
#define QUIT 9
#define IP "127.0.0.1"
using namespace std;
void runclient (char *ip);
void runserver ();
WComm w;
#include <gdiplus.h>
#pragma comment (lib, "GdiPlus.lib")/* our distressful lib-file */
using namespace Gdiplus;/* as you want, but to me not to a high permanently to write Gdiplus:: */
//7bdc1c72-01bb-4802-9998-6a5cb402006b
static const GUID bmp =//{0x7bdc1c72, 0x01bb, 0x4802, {0x99,0x98,0x6a, 0x5c, 0xb4,0x02,0x00,0x6b}};
{0x557cf406, 0x1a04, 0x11d3, {0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e}};
void runclient (char *ip);
void runserver ();
char SCREENPATH [50] = "c: \\screen \\screen.bmp";
#define SCREENPATHL L "c: \\screen \\screen.bmp"
void createscreen ()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup (&gdiplusToken, &gdiplusStartupInput, NULL);
HDC scrdc, memdc;
HBITMAP membit;
scrdc = GetDC (0);
int Height, Width;
Height = GetSystemMetrics (SM_CYSCREEN);
Width = GetSystemMetrics (SM_CXSCREEN);
memdc = CreateCompatibleDC (scrdc);
membit = CreateCompatibleBitmap (scrdc, Width, Height);
SelectObject (memdc, membit);
BitBlt (memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);
HBITMAP hBitmap;
hBitmap = (HBITMAP) SelectObject (memdc, membit);
Gdiplus:: Bitmap bitmap (hBitmap, NULL);
bitmap. Save (SCREENPATHL, &bmp);
DeleteObject (hBitmap);
}
void main (/*int argc, char *argv [] */)
{
setlocale (LC_ALL, "rus");
int t, quit, i;
char s [1024], s1 [1024];
cout <<"type:\n1-run server\n2-run client" <<endl;
cin>> t;
strcpy (s, IP);
if (t == 1)
runserver ();
else
{
runclient (s);
}
}
void runserver ()
{
//Start Server Daemon
w.startServer (27015);
printf ("Server Started........\n");
while (TRUE)
{
//Wait until a client connects
w.waitForClient ();
printf ("Client Connected......\n");
//Work with client
while (TRUE)
{
char rec [50] = "";//it is accepted the data from the client
w.recvData (rec, 32); w.sendData ("OK");//it is sent that accepted
if (strcmp (rec, "FileSend") == 0)
{ 

char fname [32] = "";



wcom.cpp

#include "wcomm.h"
WSADATA wsaData;
SOCKET m_socket;
SOCKET m_backup;
sockaddr_in con;
SOCKET AcceptSocket;
using namespace std;
BOOL GetLastWriteTime (HANDLE hFile, LPTSTR lpszString, DWORD dwSize);
//all
WComm:: WComm ()
{
//Initialize Winsock.
int iResult = WSAStartup (MAKEWORD (2,2), &wsaData);
if (iResult! = NO_ERROR)
printf ("Error at WSAStartup () \n");
//Create a socket.
//AF_INET - the Internet socket
//SOCK_STREAM - a stream socket (with connection setting)
//0 - it is by default selected TCP the protocol
m_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf ("Error at socket (): %ld\n", WSAGetLastError ());
WSACleanup ();
return;
}
//we copy a socket
m_backup = m_socket;
}
//Good Programmer do not comment this
//WComm:: ~WComm () {WSACleanup ();}
void WComm:: connectServer (char *ip, int port)
{
//Connect to a server.
con.sin_family = AF_INET;
con.sin_addr.s_addr = inet_addr (ip);
con.sin_port = htons (port);
if (connect (m_socket, (SOCKADDR *) &con, sizeof (con)) == SOCKET_ERROR) {
printf ("Failed to connect.\n");
WSACleanup ();
return;
}
}
void WComm:: startServer (int port)
{
//Connect to a server binding of a socket with the local address.
con.sin_family = AF_INET;//
con.sin_addr.s_addr = inet_addr ("0.0.0.0");
con.sin_port = htons (port);
//it is caused bind for binding
if (bind (m_socket, (SOCKADDR *) &con, sizeof (con)) == SOCKET_ERROR) {
printf ("Failed to connect.\n");
WSACleanup ();
return;
}
//Listen on the socket.
if (listen (m_socket, 1) == SOCKET_ERROR)
printf ("Error listening on socket.\n");
}
void WComm:: waitForClient ()
{
AcceptSocket = INVALID_SOCKET;
//we resolve attempt of entering connection on the server
while (AcceptSocket == INVALID_SOCKET) {
AcceptSocket = accept (m_backup, NULL, NULL);
}
m_socket = AcceptSocket;
//a m_socket-new socket
}
int WComm:: sendData (char *sendbuf)
{
return send (m_socket, sendbuf, strlen (sendbuf), 0);
}
int WComm:: recvData (char *recvbuf, int size)
{
int sz = recv (m_socket, recvbuf, size, 0);
recvbuf [sz] = '\0 ';
return sz;
}
void WComm:: closeConnection ()
{
closesocket (m_socket);
m_socket = m_backup;
}
void WComm:: fileReceive (char *filename)
{
char rec [50] = "";
HANDLE hFile;
TCHAR szBuf [MAX_PATH];
string s1;
recv (m_socket, filename, 32, 0);
send (m_socket, "OK", strlen ("OK"), 0);
hFile = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
GetLastWriteTime (hFile, szBuf, MAX_PATH);
CloseHandle (hFile);
FILE *fw = fopen (filename, "wb");
int recs = recv (m_socket, rec, 32, 0);//accepted file size
send (m_socket, "OK", strlen ("OK"), 0);
rec [recs] = '\0 ';
int size = atoi (rec);
while (size> 0)
{
char buffer [1030];
if (size> =1024)
{
recv (m_socket, buffer, 1024, 0);
send (m_socket, "OK", strlen ("OK"), 0);
fwrite (buffer, 1024, 1, fw);
}
else
{
recv (m_socket, buffer, size, 0);
send (m_socket, "OK", strlen ("OK"), 0);
buffer [size] = '\0 ';
fwrite (buffer, size, 1, fw);
}
size - = 1024;
}
char fn [MAX_PATH], fn1 [MAX_PATH];
int i=0;
//strcpy (s, szBuf);
strcpy (fn, filename);
string s_tmp;
for (int i=strlen (filename)-1; fn [i+1]! = '. '; i-)
{
s_tmp=fn [i];
s1.insert (0, s_tmp);
}
s1.resize (s1.length ());
string s2;
for (int i=0; i <MAX_PATH; i ++)
{
s_tmp=szBuf [i];
s2.push_back (szBuf [i]);
}
s2.resize (strlen (szBuf));
string s3;
s3=s2+s1;
fclose (fw);
rename (fn, s3.c_str ());
}
void WComm:: fileSend (char *fpath)
{
//Extract only filename from given path.
char filename [50];
int i=strlen (fpath);
for (; i> 0; i-) if (fpath [i-1] == ' \\') break;
for (int j=0; i <= (int) strlen (fpath); i ++) filename [j ++] =fpath [i];
////////////////////////////////////////
ifstream myFile (fpath, ios:: in|ios:: binary|ios:: ate);
int size = (int) myFile.tellg ();//current position in a flow
myFile.close ();
char filesize [10]; itoa (size, filesize, 10);
send (m_socket, filename, strlen (filename), 0);//we send a name
char rec [32] = ""; recv (m_socket, rec, 32, 0);
send (m_socket, filesize, strlen (filesize), 0);//we send file size
recv (m_socket, rec, 32, 0);//we accept acknowledgement
FILE *fr = fopen (fpath, "rb");
while (size> 0)
{
char buffer [1030];
if (size> =1024)
{
fread (buffer, 1024, 1, fr);
send (m_socket, buffer, 1024, 0);
recv (m_socket, rec, 32, 0);
}
else
{
fread (buffer, size, 1, fr);
buffer [size] = '\0 ';
send (m_socket, buffer, size, 0);
recv (m_socket, rec, 32, 0);
}
size - = 1024;
}
fclose (fr);
}
BOOL GetLastWriteTime (HANDLE hFile, LPTSTR lpszString, DWORD dwSize)
{
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC, stLocal;
DWORD dwRet;
//Retrieve the file times for the file.
if (! GetFileTime (hFile, &ftCreate, &ftAccess, &ftWrite))
return FALSE;
//Convert the last-write time to local time.
FileTimeToSystemTime (&ftWrite, &stUTC);
SystemTimeToTzSpecificLocalTime (NULL, &stUTC, &stLocal);
//Build a string showing the date and time.
dwRet = StringCchPrintf (lpszString, dwSize,
TEXT ("%02d- % 02D - % 02D - % 02D - % 02D - % 02d");
stLocal.wDay,stLocal.wMonth,stLocal.wYear;
stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
if (S_OK == dwRet)
return TRUE;
else return FALSE; 

}



wcom.h

#include "winsock2.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
#include <tchar.h>
#include <strsafe.h>
#include <string>
#include <cstring>
#include <windows.h>
#ifndef WCOME_H
#define WCOME_H
class WComm
{
public:
WComm ();
void connectServer (char *, int);
int sendData (char *);
int recvData (char *, int);
void fileSend (char *);
void fileReceive (char *);
void startServer (int);
void waitForClient ();
void closeConnection ();
}; 

#endif


'c++' 카테고리의 다른 글

[openCV] image resize  (0) 2016.01.13
java server c++ client socket 통신 관련 문제  (0) 2016.01.06
Posted by 초코렛과자
|

java server 에서 local에 있는 file을 byteArray 로 받아서 c++ client 로 socket 통신을 활용해 보내고 싶은데, 쉽게 되지가 않는다. java server client간 socket 통신은 쉽게 되던데 c++ client 로 보내는건 어느 부분에서 문제가 생긴건지 조차 쉽게 발견되지 않는다. 현재 문제의 원인이라고 생각되는 부분은 다음과 같다.


1. java server 에서는 UTF-8이나 유니코드를 사용하는데, 받는 C++ client 에서는 ASCII 코드를 사용해서 넘겨주는 과정에서 쓰레기 값이 되서 넘어오는경우. 이 경우의 경우 java 쪽에서 형태를 변환해 줘야 할텐데, 시도해 봐야겠다.


2. java server 에서 파일을 File file= new File(경로) 로 불러와서 byte[] byteArr = new byte[(int)file.length] 형태로 받아서 bufferedout.write 와 bufferedin.read 를 통해 넘겨주는데, c++ client에서는 이를 받을 수 있는 형태가 없는 경우. 이 경우는 어떻게 해결해야 될지 모르겠다.


위에서 java server라고 썼지만, 실제로는 android를 server로 하고있다.


현재 하고자 하는 일은 android phone에서 찍은 사진을 c++과 socket을 통해 pc로 떨구고자 하는 일이다. 엄청 쉽다고 생각했는데, 생각보다 쉽게 풀리지 않는다. 


p.s. 혹시 관련 예제나 힌트를 주실 수 있는 분이 있다면 정중하게 댓글을 부탁합니다.


'c++' 카테고리의 다른 글

[openCV] image resize  (0) 2016.01.13
android c++ socket file transfer  (0) 2016.01.08
Posted by 초코렛과자
|

sdk 일정 버전 이상에서는 switch 문을 사용하면 오류가 난다.

이럴경우 전부 if else 문으로 바꾸어 주어야 함.

Posted by 초코렛과자
|

A라는 App에서 B라는 App를 실행하고 싶을 때 사용하는 예제


A.java


Intent intent = new Intent();

intent.setClassName("com.example", "com.example.MainActivity");

startActivity(intent);


com.example에는 B프로젝트의 MainActivity가 있는 package 명을.

com.example.MainActivity 에는 MainActivity까지의 입력하면 된다.


여기에 값을 넘기고 싶으면, intent.putextra("key", "value"); 를 통해서

이건 일반적인 intent에서 값을 넘기는 것과 같다.

'android' 카테고리의 다른 글

[android] Screenshot 기능 넣기  (0) 2016.01.31
[android] switch vs if else  (0) 2015.01.29
[android]URL ImageView 생성  (0) 2015.01.27
[android]AlertDialog ListView 예제  (0) 2015.01.20
[android]URL을 통한 Image 받아오기  (0) 2015.01.19
Posted by 초코렛과자
|
이상하게 구글링을 통해 얻은 많은 예제들이 동작하지 않아, AsynckTask를 통한 URL ImageView를 구현하였다.
MainActivity.java

public class MainActivity extends Activity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
new DownloadImageTask((ImageView) findViewById(R.id.img_test)).execute("URL");
}

}


DownloadImageTask.java

public class DownloadImageTask extends AsyncTask {

	ImageView bmImage;

	public DownloadImageTask(ImageView bmImage) {
		this.bmImage = bmImage;
	}

	@Override
	protected Bitmap doInBackground(String... urls) {
		String urlDisplay = urls[0];
		Log.e("hong", "urls : " + urls[0]);
		Bitmap mIcon11 = null;
		try {
			InputStream in = new java.net.URL(urlDisplay).openStream();
			mIcon11 = BitmapFactory.decodeStream(in);
		} catch (Exception e) {
			Log.e("hong", "error : " + e.getMessage());
			e.printStackTrace();
		}
		return mIcon11;
	}

	@Override
	protected void onPostExecute(Bitmap result) {
		bmImage.setImageBitmap(result);
	}

}
이렇게하니 되더라!
Posted by 초코렛과자
|

안드로이드에서 AlertDialog에 ListView를 띄우는 예제 

참고 블로그 - http://yuihorie1004.tistory.com/8



1. String.xml 


<?xml version="1.0" encoding="utf-8"?>

<resources>


    <string name="app_name">ListViewDialog</string>

    <string name="hello">ListView Test</string>

    <string name="action_settings">Settings</string>


    <!-- ListDialog를 위한 string -->

<string name="list_dialog_title">선택하세요..</string>

<string-array name="list_dialog_list_item">

<item>item select one...</item>

<item>item select two...</item>

<item>item select three...</item>

<item>item select four...</item>

</string-array>

    

</resources>


2. main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.listviewdialog.MainActivity" >


    <TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello" />

    

<Button android:id="@+id/btn_list_dialog"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Button List Dialog">

</Button>

    


</LinearLayout>


3. MainActivity.java

package com.example.listviewdialog;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;


public class MainActivity extends Activity implements OnClickListener{

private static final String TAG = "hong";
private Button mBtnListDialog;
private ListViewDialog mDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViews();
    }

private void findViews() {
mBtnListDialog = (Button)findViewById(R.id.btn_list_dialog);
mBtnListDialog.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_list_dialog:
Log.d(TAG, "click button list dialg...");
showListDialog();
break;

default:
break;
}
}

private void showListDialog() {
String[] item = getResources().getStringArray(R.array.list_dialog_list_item);
//array를 ArrayList로 변경하는 방법
List<String> listitem = Arrays.asList(item);
ArrayList<String> itemArrayList = new ArrayList<String>(listitem);
mDialog = new ListViewDialog(this, getString(R.string.list_dialog_title), itemArrayList);
mDialog.onOnSetItemClickListener(new ListViewDialogSelectListener() {
@Override
public void onSetOnItemClickListener(int position) {
if(position == 0){
Log.d(TAG, "first index selected");
}
mDialog.dismiss();
}
});
mDialog.show();
}
}

DB에서 값을 받아 ArrayList에 저장 한 후 showListDialog를 호출하면서 넘겨주는 방법으로 itemArrayList를 구성할 수 도 있다. 그렇게 되면 

String[] item = getResources().getStringArray(R.array.list_dialog_list_item);
List<String> listitem = Arrays.asList(item);

이 두줄의 코드는 없어져도 된다.

4. ListViewDialog.java

package com.example.listviewdialog;

import java.util.ArrayList;

import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListViewDialog extends Dialog{

private static final String TAG = "hong";
private ListViewDialogSelectListener mListener;
private Context mContext;
private ArrayList<String> mStrListItem;
private ListView mListView;
public ListViewDialog(Context context, String title, ArrayList<String> item) {
super(context);
setContentView(R.layout.list_view_dialog);
mContext = context;
findViews();
setTitle(title);
mStrListItem = item;
createListViewDialog();
}
private void createListViewDialog() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1, mStrListItem);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.d(TAG, "list index = [" + arg2 + "]");
mListener.onSetOnItemClickListener(arg2);
}
});
}

private void findViews() {
mListView = (ListView) findViewById(R.id.list_view_dialog);
}

public void onOnSetItemClickListener(ListViewDialogSelectListener listener) {
mListener = listener;
}

}

5. ListViewDialogSelectListener.java

package com.example.listviewdialog;

public interface ListViewDialogSelectListener {

public void onSetOnItemClickListener(int position);
}


Posted by 초코렛과자
|

MainActivity 부분


onCreate(){

String URL = "이미지주소";

new DownloadImageTask((ImageView)findViewById(R.id.imageView)).execute(URL);

}


DownloadImageTask.java 부분



public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {


ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {

this.bmImage = bmImage;

}

@Override

protected Bitmap doInBackground(String... urls) {

String urlDisplay = urls[0];

Bitmap mIcon11 = null;

try{

InputStream in = new java.net.URL(urlDisplay).openStream();

mIcon11 = BitmapFactory.decodeStream(in);

}catch (Exception e){

Log.e("hong", "error : " + e.getMessage());

e.printStackTrace();

}

return mIcon11;

}


@Override

protected void onPostExecute(Bitmap result) {

bmImage.setImageBitmap(result);

}

}

'android' 카테고리의 다른 글

[android]URL ImageView 생성  (0) 2015.01.27
[android]AlertDialog ListView 예제  (0) 2015.01.20
[android]Test 공부중5. MOCK 객체  (0) 2015.01.12
[android]Test 공부중4.  (0) 2015.01.07
[android]Task 관련 공부중1  (0) 2015.01.07
Posted by 초코렛과자
|

단언문


1. Assertion(단언)이란?

- 판단할 수 있는 특정 상태를 평가해서 기대한 상태와 일치하지 않으면 테스트를 중단하고 예외를 던지는 메서드


2. JUni API에는 모든 테스트 케이스의 부모클래스인 Assert 클래스가 있다.


3. 테스트 하는 도중에 단언문 하나가 실패하면 AssertionFailedException이 던져진다.


4. fail() 메서드를 활용해서 메소드가 예외를 잘 던지는지 확인 할 수 있다.

public void testShouldThrowException{

try{

MainActivity.methodThatShouldThrowException();

fail("Exception was not thrown");

}catch(Exception ex){

//아무 동작 안함

}

}


5. 사용자 정의 메시지 

- 모든 assert 메서드는 String 타입의 사용자 정의 메시지를 사용 할 수 있다.

- 사용자 정의 메시지를 사용하면, 테스트 실패시 기본 메시지 대신 출력되지 때문에 테스트 결과에서 실패 내용

파악이 용이해 진다.

public void testMax(){

final int a = 1;

final int b = 2;

final int expected = b;

final int actual = Math.max(a,b);

assertEquals("Expection " + expected + "but was " + actual, expected, actual);

}


6. Static import

import static android.test.ViewAsserts.해당함수;


7. 뷰 단언문

- 보통 한드로이드 UI를 테스트하기 위해서는 뷰와 관련됨 더 전문적인 메서드가 필요

- 안드로이드는 이를 위해 뷰의 정적 또는 상대적 위치와 뷰와의 관계를 테스트 할 수 있는

android.test.ViewAsserts 클래스를 제공.


8. 추가적인 단언문 MoreAssserts 클래스

- @UiThreadTest 어노테이션 사용


9. TouchUtils 클래스

- 터치이벤트를 간편하게 생성 할 수 있게 도와줌


                                     

'android' 카테고리의 다른 글

[android]URL을 통한 Image 받아오기  (0) 2015.01.19
[android]Test 공부중5. MOCK 객체  (0) 2015.01.12
[android]Task 관련 공부중1  (0) 2015.01.07
[android]Test 공부중3.  (0) 2015.01.06
[android]Test 공부중2.  (0) 2015.01.06
Posted by 초코렛과자
|